Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ts中映射元组?_Javascript_Typescript_Flowtype - Fatal编程技术网

Javascript 在ts中映射元组?

Javascript 在ts中映射元组?,javascript,typescript,flowtype,Javascript,Typescript,Flowtype,我正在将一些流代码转换为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>> {

我正在将一些流代码转换为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));
}
声明函数$nullablewait(p:Promise | T):T | null;
导出函数genAllNull(…承诺:T):承诺{
返回Promise.all([].map.call(promises,genNull));
}

具体来说,我在TS中找不到任何与flow中的
$TupleMap
等价的东西,它允许我将类型数组从一种类型映射到另一种类型

您可以像映射typescript 3.1之后的任何其他类型一样映射元组(请参见此)

如果我对您代码的理解是正确的(并且我并不声称知道流程)。这将是您正在寻找的:

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]>
type Unpack=T扩展承诺?U:T;
类型unpacallornull={
[P in keyof T]:解包|空
}
导出函数genAllNull(…承诺:T):承诺{
返回null!;
}
设a=genAllNull(Promise.resolve(1),Promise.resolve(“”)//Promise

这是很好的代码:-)