从typescript中的promise数组中移除未定义的resolved promise



我正在使用typescript,我有一个场景,我有一个异步函数,它将返回我值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[]>而不是Promise<(string | undefined)[]>。谁能帮帮我我怎么能这么做?

更新:我已经删除了如下未定义的值:

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)[]>

正如您所说,.filter可以用来删除undefined值:

const myFunction = async(params : string[]) : Promise<string[]> => {
const results = await Promise.all(params.map((param) => someFunction(param)));
return results.filter((r): r is string => r !== undefined);
};

然而,我们需要帮助Typescript理解回调过滤掉undefined值,这就是r is string(一个类型谓词)的作用。

最新更新