gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:01 24 4
gpt4 key购买 nike

使用 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 编译器 error TS2453: The type argument for type parameter 'R' cannot be inferred from the usage 的 Promise.all 行得到一个错误。考虑明确指定类型参数。类型参数候选“string[]”不是有效的类型参数,因为它不是候选“MyObject”的父类(super class)型。 “MyObject”类型中缺少属性“length”。

实际上我还有另一个例子,错误的第二句和第三句不同,但第一句是相同的。所以基本上我想知道“明确指定类型参数”的语法是什么。我似乎无法弄清楚。代码运行良好,但我想摆脱此转译器警告。

最佳答案

解决方法如下:

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

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

// do stuff
});

竖线用于指定可以是多种类型之一的值。

关于TypeScript:类型参数 'R' 的类型参数无法从用法中推断出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com