使用es6-shim时的typescript typings错误Promise.all()

时间:2016-08-05 20:43:27

标签: typescript es6-promise typescript-typings

问题
typescript编译器似乎错误地为Promise.all()发出了类型错误。

特别是,它似乎是:

  • es6-shim 中Promise.all()的输入不正确
  • 或者,打字稿编译器不能正确解释这些打字

我在es6-shim中查看了Promise的内容,但它们似乎对我来说是正确的。特别是,似乎这就是被误解的界限:

interface PromiseConstructor {
    all<T>(values: IterableShim<T | PromiseLike<T>>): Promise<T[]>;
}

也许可以解析输入:Promise<PromiseLike<T>[]>
而不是Promise返回一组(非Promise)值。

重现
OSX:El Capitan 10.11.6 节点:v4.4.7
打字稿:1.8.10
打字:1.3.2

我设置了一个最小的例子,清除我的typings目录,然后运行:

typings install dt~es6-shim --save --global

然后我创建了一个测试文件,t.ts:

/// <reference path="typings/globals/es6-shim/index.d.ts" />
export function seedTestDatabase() : Promise<boolean[]> {
    type BP = Promise<boolean>
    var promises: BP[] = []
    var bp: BP = Promise.resolve(true)
    promises.push(bp)
    promises.push(Promise.resolve(true))
    var p = Promise.all(promises)
    return p
}

我编译了这个:

tsc --module commonjs t.ts

产生错误:

t.ts(9,12): error TS2322: Type 'Promise<Promise<boolean>[]>' is not assignable to type 'Promise<boolean[]>'.  
Type 'Promise<boolean>[]' is not assignable to type 'boolean[]'.  
Type 'Promise<boolean>' is not assignable to type 'boolean'.  

注意:代码返回一个Promise,解析为一个值数组,如预期的那样。

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的TS?

似乎是这个错误:https://github.com/Microsoft/TypeScript/issues/10143

它已在TS 2.0 beta中修复。