2016-08-24 17 views
0

具体的には、bowser DefinitelyTyped定義ファイルを使用することについてのmy previous questionのフォローアップとして、私はimportというステートメントをその質問の答えに基づいて実装し、さらに進んでいます。しかし今、TypeScriptコンパイラは、すべてのbowserインポートナンセンスの前に完全にコンパイルされたコードについて不平を言っています。importステートメントを使用すると、他のクラス参照が壊れますか?

のは、私がMyBowserClass.tsあるとしましょう:

import bowser = require('bowser'); 
 

 
namespace MyNamespace { 
 
    export class MyBowserClass { 
 
     constructor() { 
 
      var isIos = (typeof bowser.ios === 'undefined') ? false : bowser.ios; 
 
      alert(isIos); 
 

 
      var myInstance = new MyNamespaceTwo.MyOtherClass(); // typescript compiler complains: Property 'MyOtherClass' does not exist on type 'typeof MyNamespaceTwo'. 
 
     } 
 
    } 
 
}

をそして、私はMyOtherClass.tsを持っている:

namespace MyNamespaceTwo { 
 
    export class MyOtherClass { 
 
     constructor() { 
 
      alert('otherclass ctor'); 
 
     } 
 
    } 
 
}

コンパイラは、ここで私にエラーを与えている:

var myInstance = new MyNamespaceTwo.MyOtherClass();

をだから私は多分これは私もMyOtherClassをインポートする必要があることを意味を推測Property 'MyOtherClass' does not exist on type 'typeof MyNamespaceTwo'.

を言って?

私は、これは私の2つのファイルを更新することで動作するようになった:

import bowser = require('bowser'); 
 
import otherClass = require('MyOtherClass'); // NEW IMPORT 
 

 
namespace MyNamespace { 
 
    export class MyBowserClass { 
 
     constructor() { 
 
      var isIos = (typeof bowser.ios === 'undefined') ? false : bowser.ios; 
 
      alert(isIos); 
 

 
      var myInstance = new otherClass.MyNamespaceTwo.MyOtherClass(); // changed this to prefix with 'otherClass' 
 
     } 
 
    } 
 
}

export namespace MyNamespaceTwo { // made this EXPORT 
 
    export class MyOtherClass { 
 
     constructor() { 
 
      alert('otherclass ctor'); 
 
     } 
 
    } 
 
}

これは総混乱/狂気のように思えます。私はここで何が欠けていますか?とにかくbowser定義ファイルをモジュールにする必要があります(グローバル/基本的に静的メソッド名で構成されていますか?)。どのようなガイダンスやヘルプもありがとうございます。

+0

変更した内容を説明するのではなく、変更後のコードを投稿してください。理解するのがはるかに簡単になります。 –

+0

@NitzanTomerそこに行く。助けてくれることを望む。 –

答えて

2

ファイルをグローバル宣言ファイルからモジュール宣言ファイルに変更しているようです。

  • グローバル宣言ファイルは何をインポートする必要がなく、プロジェクト全体でそれに宣言された型にアクセスできるようになります。グローバル宣言ファイルは決して別のファイルからインポートすることはできません。また、宣言された型がどこでも使用可能であるため、それらはエクスポートされません。

    例: reduxを使用するプロジェクトは、プロジェクト内のどこにでも使用することができますSpecialAction宣言することができます:

    // index.d.ts 
    interface SpecialAction { 
        type: string 
        isSpecial: boolean 
    } 
    
    // src/app.ts 
    let theAction: SpecialAction = { 
        type: 'SPECIAL', 
        isSpecial: true 
    } 
    
  • モジュール宣言ファイルモジュールに輸出特定のタイプを、その輸出は、プロジェクト内の別の場所にインポートすることができます。宣言ファイルでインポートまたはエクスポートするとすぐに、モジュール宣言ファイルになります。私はこれが役に立てば幸い

    // index.d.ts 
    import { Action } from 'redux' 
    export interface SpecialAction extends Action { 
        isSpecial: boolean 
    } 
    
    // src/app.ts 
    import { SpecialAction } from '../index' 
    let theAction: SpecialAction = { 
        type: 'SPECIAL', 
        isSpecial: true 
    } 
    

¯\_(ツ)_/¯

+1

これは私の質問に答えるのに役立つと思います: '宣言ファイルでインポートまたはエクスポートするとモジュール宣言ファイルになり次第' my 'import bowser = require( 'bowser');'行がファイルを "モジュール宣言 "を参照してください。それは私が期待しないだろう。私はすべてのことについてかなりばかばかしく感じる、それは私が読むための時間だと思う。 –

+0

これはまさに私が無限の時間を無駄にしてしまったからです。私は助けることができてうれしい! –

+0

Pelleもありがとうございますが、エクスポートクラス(@typesサポート用)の 'moment'にアクセスする方法を解決するにはどうすればいいですか?私は 'import moment = require( 'moment');をファイルの先頭に追加するときに同じ問題を抱えています。 – GONeale

関連する問題