TypeScript:类型参数“R”的类型参数无法从用法中推断出来

时间:2015-11-26 19:54:04

标签: typescript promise es6-promise typescript1.6

使用TypeScript 1.6和native es6 Promises每当我使用Promise.all([])两种不同的返回类型时,我都会收到错误。例如:

let onePromise:Promise<string[]> = getOne();
let twoPromise:Promise<MyObject> = getTwo();

Promise.all([onePromise, twoPromise])
    .then((values:[string[], MyObject]) => {
        let one:string[] = values[0];
        let two:MyObject = values[1];

        // do stuff
    });

在该示例中,我在TypeScript编译器Promise.all

error TS2453: The type argument for type parameter 'R' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'string[]' is not a valid type argument because it is not a supertype of candidate 'MyObject'. Property 'length' is missing in type 'MyObject'.行上收到错误

我实际上有另一个例子,其中错误的第二句和第三句不同,但第一句是相同的。所以基本上我想知道'明确指定类型参数'的语法是什么。我似乎无法弄明白。代码运行正常,但我想摆脱这个转发器警告。

2 个答案:

答案 0 :(得分:3)

这是一个解决方法:

['m','a','b','c','d']

垂直条用于指定可以是多种类型之一的值。

答案 1 :(得分:1)

我只知道这个解决方法:

///<reference path="typings/es6-promise/es6-promise.d.ts" />

class MyObject {}

let onePromise:Promise<string[]> = null;
let twoPromise:Promise<MyObject> = null;

Promise.all([onePromise, twoPromise])
    .then((data:any) => {
        let values:[string[],MyObject] = data;

        let one = values[0];
        let two = values[1];

        // do stuff
    });