ES6 Promise需要在typescript 2.0中进行论证吗?

Kok*_*oko 4 typescript es6-promise

我正在继续研究现有的打字稿项目.原始项目使用gulp-typescript编译.ts文件,但我使用的是Visual Studio Code附带的tsc编译器.但我不能让ES6承诺工作.

我已经为ES6承诺安装了一个定义文件:

npm install --save @types/es6-promise
Run Code Online (Sandbox Code Playgroud)

这将在node_modules文件夹中创建一个具有promise定义文件的目录:

node_modules
    @types
        es6-promise
            index.d.ts
            package.json
            types-metadata.json
            readme.md
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

"files": [
    "src/main.ts",
    "src/game.ts",
    "node_modules/@types/es6-promise/index.d.ts"
]
Run Code Online (Sandbox Code Playgroud)

参考

///<reference path="../node_modules/@types/es6-promise/index.d.ts" />
Run Code Online (Sandbox Code Playgroud)

我假设包含promise定义文件现在正在工作,但在编译项目时出现以下错误:

error TS2314: Generic type 'Promise<T>' requires 1 type argument(s).
Run Code Online (Sandbox Code Playgroud)

当我查看原始代码时,我发现:

    private componentsPromise: Promise<Component[]>;
    private startPromise: Promise; // <- error

    public getComponents(): Promise<Component[]> {
        return this.componentsPromise;
    }

    public isStarted(): Promise {   // <-- error
        return this.startPromise;
    }
Run Code Online (Sandbox Code Playgroud)

这是原始项目中的一个简单错误还是我错过了什么?我需要在这里添加什么才能让承诺再次发挥作用?

Paa*_*rth 6

承诺是通用的,因为它的内部价值各不相同.所以,如果你有一个承诺并且你打电话.then(x => ...),那x的类型是什么?泛型允许类型检查器正确解释这一点.

要使其正常工作,您需要添加特定类型.如果它不包含任何数据且仅用于解析/拒绝功能,请使用Promise<void>.最终这是一种类型的签名,Promise<any>如果你需要,你可以使用.