从打字稿中的承诺数组中删除未定义的已解决承诺
Remove undefined resolved promise from array of promise in typescript
我正在使用打字稿,我有一个场景,我有一个异步函数,它将 return 我值 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'.)
我想删除那些未定义的值(这件事可以使用过滤器完成)但我也不想更改我的 return 类型的 myFunction
。我想保留它的 return 输入 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 仍然要求我将函数的 return 类型从 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
(a type predicate) 的作用。
我正在使用打字稿,我有一个场景,我有一个异步函数,它将 return 我值 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'.)
我想删除那些未定义的值(这件事可以使用过滤器完成)但我也不想更改我的 return 类型的 myFunction
。我想保留它的 return 输入 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 仍然要求我将函数的 return 类型从 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
(a type predicate) 的作用。