【问题标题】:Describing union of input types in TypeScript在 TypeScript 中描述输入类型的联合
【发布时间】:2021-02-15 16:20:28
【问题描述】:

假设我们有一个包装对象:

interface Wrapper<T> {
  value: T
}

我想设计一个函数,接收Wrapper 对象作为参数(可能带有不同的 T)并返回其中一个:

function <T extends ReadonlyArray<Wrapper<any>>>(...args: T) { ... }

此类函数的返回类型应为 Wrapper。如何在 Typescript 中描述这样的返回类型,而不丢失输入类型(即不是Wrapper&lt;any&gt;)?

【问题讨论】:

    标签: typescript generics


    【解决方案1】:

    你在正确的轨道上。该函数将捕获正确的类型,约束中的 any 用作通配符, any 不会进入 T (取决于差异,您可以将其替换为 unknownnever 但通常不是值得)

    如果T 包含一个包装器数组,您可以使用类型索引查询获取传递给 wrppper 的类型的联合:

    function getOne<T extends ReadonlyArray<Wrapper<any>>>(...args: T): Wrapper<T[number]['value']> {
        return args[0];
    }
    
    let x = getOne({
        value: { a: 1}
    }, {
        value: { b: 1}
    })
    
    // let x: Wrapper<{
    //     a: number;
    // } | {
    //     b: number;
    // }>
    

    Playground Link

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2022-10-14
      • 1970-01-01
      • 2020-11-13
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多