我继续在一个现有的打字项目上工作。原来的项目使用GULP脚本来编译.ts文件,但是我使用的是带有VisualStudio代码的TSC编译器。但我不能让ES6承诺工作。
我已经安装了ES6承诺的定义文件:
npm install --save @types/es6-promise
这将在node\u modules文件夹中创建一个目录,其中包含promise定义文件:
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;
}
这是原始项目中的一个简单错误还是我遗漏了什么?我需要补充些什么才能让承诺再次生效?
最佳答案
承诺是通用的,因为它的内在价值不同。所以,如果你有一个承诺,你打电话给.then(x => ...)
,那么x是什么类型的?泛型允许类型检查器正确地解释这一点。
要使此工作正常,需要添加特定类型。如果它不包含任何数据并且纯粹用于解析/拒绝功能,请使用Promise<void>
。最终,这是一个像其他任何类型的签名,所以如果需要的话,你可以使用Promise<any>
。