我正在将一些流代码转换为ts,但不确定如何在TS中执行与该流代码等效的操作:
declare function $nullableAwait<T>(p: Promise<T> | T): T | null;
export function genAllNull<T: Iterable<mixed>>(...promises: T): Promise<$TupleMap<T, typeof $nullableAwait>> {
return Promise.all([].map.call(promises, genNull));
}
具体来说,我在TS中找不到与流中的$TupleMap
等效的任何东西,这使我可以将类型数组从一种类型映射到另一种类型
答案 0 :(得分:0)
自打字稿3.1起,您可以像其他任何类型一样映射元组(请参见PR)
如果我对您的代码的理解是正确的(并且我不声称知道流程)。这就是您要寻找的东西:
type Unpack<T> = T extends Promise<infer U> ? U : T;
type UnpackAllOrNull<T> = {
[P in keyof T]: Unpack<T[P]> |null
}
export function genAllNull<T extends Promise<any>[]>(...promises: T): Promise<UnpackAllOrNull<T>> {
return null!;
}
let a = genAllNull(Promise.resolve(1),Promise.resolve("")) //Promise<[number | null, string | null]>