2016-09-29 8 views
3

私は既存のタイスクリプトプロジェクトの作業を続けています。元のプロジェクトではgts-typescriptを使って.tsファイルをコンパイルしましたが、Visual Studio Codeに付属のtscコンパイラを使用しています。しかし、私はES6の約束を働かせることはできません。私はES6の定義ファイルをインストールしているES6プロミスにはtypescript 2.0の引数が必要ですか?

は約束:

tsconfig.json

node_modules 
    @types 
     es6-promise 
      index.d.ts 
      package.json 
      types-metadata.json 
      readme.md 

npm install --save @types/es6-promise 

これは約束定義ファイルを持っているnode_modulesフォルダ内のディレクトリを作成します

"files": [ 
    "src/main.ts", 
    "src/game.ts", 
    "node_modules/@types/es6-promise/index.d.ts" 
] 

参照

///<reference path="../node_modules/@types/es6-promise/index.d.ts" /> 

私は約束の定義ファイルを含め、今取り組んでいることを仮定しているが、プロジェクトをコンパイルするとき、私は次のエラーを取得する:

error TS2314: Generic type 'Promise<T>' requires 1 type argument(s). 

私は元のコードで見たとき、私はこれを見つける:

private componentsPromise: Promise<Component[]>; 
    private startPromise: Promise; // <- error 

    public getComponents(): Promise<Component[]> { 
     return this.componentsPromise; 
    } 

    public isStarted(): Promise { // <-- error 
     return this.startPromise; 
    } 

これは元のプロジェクトでは単純なエラーですか、何か不足していますか?もう約束を得るためにここに追加する必要があるのは何ですか?

+1

おそらくユーズは 'Promise 'を使用しますか? –

+2

さて、はい、それは単純なエラーです。エラーメッセージのように、 'Promise'型は型引数を必要とします。 'startPromise'はどのようなタイプで解決されますか? – Bergi

+0

ありがとう、私はこれがどのように働いたのか、あるいはエラーがおそらく私が定義ファイルをどのように含んでいたかには分かりませんでした。私は、約束が返されるはずのタイプを見つけて、Promise の間にそれを追加しました。今、エラーはなくなりました:) – Kokodoko

答えて

4

約束は内部価値によって異なるため、一般的です。だからあなたが約束を持っていて、.then(x => ...)と呼ぶなら、xのタイプは何ですか?ジェネリックは、型チェッカーがこれを正しく解釈できるようにします。

この機能を利用するには、特定のタイプを追加する必要があります。純粋に解決/拒否機能のためにデータが含まれていない場合は、Promise<void>を使用してください。最終的にはこれは他のタイプと同様にタイプシグネチャなので、必要に応じてPromise<any>を使用できます。

関連する問題