2016-09-29 60 views
3

我正在繼續研究現有的打字稿項目。原始項目使用gulp-typescript編譯.ts文件,但我使用的是Visual Studio Code附帶的tsc編譯器。但我不能讓ES6承諾工作。ES6承諾需要打字稿2.0中的參數?

我已經安裝了ES6定義文件承諾:

npm install --save @types/es6-promise 

這將創建一個有承諾的定義文件node_modules文件夾的目錄:

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

tsconfig.json

"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

也許juse使用'Promise '? –

+2

嗯,是的,這是一個簡單的錯誤。就像錯誤消息所說的那樣,'Promise'類型需要一個類型參數。 'startPromise'解決什麼類型? – Bergi

+0

謝謝,我不知道這是如何工作,或者如果錯誤可能與我如何包含定義文件。我發現承諾應該返回的類型,並在Promise 之間添加了,現在錯誤消失了:) – Kokodoko

回答

4

承諾是通用的,因爲它的內部價值不同。所以如果你有承諾並且你打電話給.then(x => ...),x的類型是什麼?泛型允許類型檢查器正確解釋這一點。

爲了得到這個工作,你需要添加特定的類型。如果它不包含數據並且純粹用於解析/拒絕功能,請使用Promise<void>。最終這是一種類型簽名,因此您可以根據需要使用Promise<any>