假设我们有一个包装对象:
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;
// }>
关于typescript - 描述 TypeScript 中输入类型的联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66204050/