2016-09-29 57 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>