【问题标题】:Mapping Tuples in ts?在 ts 中映射元组?
【发布时间】:2019-01-12 16:43:55
【问题描述】:

我正在将一些流代码转换为 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 的东西,它允许我将类型数组从一种类型映射到另一种类型

【问题讨论】:

  • 这是很好的代码 :-)

标签: javascript typescript flowtype


【解决方案1】:

您可以像映射自 typescript 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]>

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2016-02-10
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多