typescript - 描述 TypeScript 中输入类型的联合

标签 typescript generics

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

interface Wrapper<T> {
  value: T
}

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

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

此类函数的返回类型应为 Wrapper<(union of input Ts)>。如何在 Typescript 中描述此类返回类型,而不丢失输入类型(即不是 Wrapper<any> )?

最佳答案

您走在正确的道路上。该函数将捕获正确的类型,约束中的 any 用作通配符,any 不会使其成为 T (根据方差,您可以将其替换为 unknown从不,但通常不值得)

如果 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

关于typescript - 描述 TypeScript 中输入类型的联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66204050/

相关文章:

angular - Angular 中连续 HTTP 请求的动态数量

angular - Jasmine 测试订阅服务级别可从 OnInit Angular 观察到

c# - 该类型必须是引用类型才能将其用作泛型类型或方法中的参数 'T'

c# - 使用通用目的地映射不起作用?

typescript - 如何删除重复的类型并避免以 never 结尾?

Angular : HttpClient Service and Observable custom type

javascript - 带有 d3 的 Angular 项目符号图

java - 为什么我无法初始化通用参数和数组?

java - 通用 map 打印功能

api - 数据更新后下拉列表没有变化,因为两个API同时调用