ES6 Promise 需要 typescript 2.0 中的参数?
ES6 Promise requires argument in typescript 2.0?
我正在继续处理现有的打字稿项目。原项目使用gulp-typescript编译.ts文件,但我使用的是Visual Studio代码自带的tsc编译器。但我无法让 ES6 承诺发挥作用。
我已经安装了 ES6 promise 的定义文件:
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" />
我假设包含 promise 定义文件现在可以正常工作,但在编译项目时出现以下错误:
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;
}
这是原始项目中的一个简单错误还是我遗漏了什么?我需要在此处添加什么才能让承诺再次生效?
承诺是通用的,因为它的内部价值各不相同。所以如果你有一个 promise 并且你调用 .then(x => ...)
,那么 x 的类型是什么?泛型允许类型检查器正确解释它。
要使其正常工作,您需要添加特定类型。如果它不包含任何数据并且纯粹用于 resolve/reject 功能,请使用 Promise<void>
。最终,这是一个与任何其他类型签名一样的类型签名,因此如果需要,您可以使用 Promise<any>
。
我正在继续处理现有的打字稿项目。原项目使用gulp-typescript编译.ts文件,但我使用的是Visual Studio代码自带的tsc编译器。但我无法让 ES6 承诺发挥作用。
我已经安装了 ES6 promise 的定义文件:
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" />
我假设包含 promise 定义文件现在可以正常工作,但在编译项目时出现以下错误:
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;
}
这是原始项目中的一个简单错误还是我遗漏了什么?我需要在此处添加什么才能让承诺再次生效?
承诺是通用的,因为它的内部价值各不相同。所以如果你有一个 promise 并且你调用 .then(x => ...)
,那么 x 的类型是什么?泛型允许类型检查器正确解释它。
要使其正常工作,您需要添加特定类型。如果它不包含任何数据并且纯粹用于 resolve/reject 功能,请使用 Promise<void>
。最终,这是一个与任何其他类型签名一样的类型签名,因此如果需要,您可以使用 Promise<any>
。