【发布时间】:2021-09-01 11:58:30
【问题描述】:
我正在使用打字稿,并且我有一个异步函数,当它被解决时,它将返回我的值string or undefined。函数原型如下所示:
const someFunction = async(someParam : string) => Promise<string | undefined>
现在我将在另一个函数(say myFunction) 中调用这个函数以获得一些不同的值并获得承诺。
const myFunction = async(params : string[]) : Promise<string[]> => {
const results = params.map(async (param) => {
const value = await someFunction(param);
return value;
});
return Promise.all(results);
};
这里出现以下错误:
Type '(string| undefined)[]' is not assignable to type 'string[]'.
Type 'string | undefined' is not assignable to type 'string'.
Type 'undefined' is not assignable to type 'string'.)
我想删除那些未定义的值(这件事可以使用过滤器来完成)但我也不想更改我的返回类型myFunction。我想保留它的返回类型Promise<string[]> 而不是@987654328 @。有人可以帮我怎么做吗?
更新:我已经删除了这样的未定义值:
const myFunction = async(params : string[]) : Promise<string[]> => {
const results = params.map(async (param) => {
const value = await someFunction(param);
return value;
}).filter(value => value!== undefined);
return Promise.all(results);
};
现在我已经删除了未定义的值。但是我仍然遇到与以前相同的错误。 Typescript 仍然要求我将函数的返回类型从 Promise<string[]> 更改为 Promise<(string | undefined)[]>
【问题讨论】:
-
所以如果
params数组和myFunction的(包装的)返回数组有不同的长度就可以了吗?因为如果您想过滤掉undefined值,就会出现这种情况。既然您已经知道可以使用过滤器从数组中删除undefined值,那么您卡在哪里了? -
@FelixKling 是的,如果长度不同就可以了。
-
我可能是错的,但删除
undefined结果在运行时不会解决您的Typescript 错误。为此,您可能至少需要.reduce()而不是.map()。 -
@FelixKling 主要问题是打字稿抛出错误是我需要将返回类型从 {Promise
} 更改为 {Promise} 我不想。 -
当您返回
Promise<(string | undefined)[]>时,Promise<String[]>是错误的返回类型。要么更改返回类型,要么过滤掉undefined。
标签: javascript typescript es6-promise