我继续在一个现有的打字项目上工作。原来的项目使用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>

09-25 18:32
查看更多