我试图定义两种数组类型之间的关系,这种关系由包装器泛型关联:
interface WrapperType<T> {
innerValue: T;
}
type InnerArrayType = (TypeA | TypeB | TypeC)[];
type WrappedArrayType = (WrapperType<TypeA>|WrapperType<TypeB>|WrapperType<TypeC>)[];但是,这两种联合类型之间的信息。当其中一个发生变化时,另一个也必须手动更改。我想知道是否有一个可重用的实用程序类型可以接受InnerArrayType和WrapperType并输出WrappedArrayType。
type MagicUtility<T> = ???????
type WrappedArrayType = MagicUtility<InnerArrayType>;
// equivalent to
type WrappedArrayType = (WrapperType<TypeA>|WrapperType<TypeB>|WrapperType<TypeC>)[];在我的用例中,TypeA,TypeB,TypeC.是预定义的、静态的和有限的。注意,它们不是字符串类型。
更新
我能够用下面的方法获得Array<Generic of union>。因此,有一种将Array<Generic of union>转换为Array<Union of generic>的方法,问题将得到解决。然而,这似乎是一个不可能的问题:https://github.com/Microsoft/TypeScript/issues/27272。
interface MyWrapper<T> {
inner: T;
}
type ArrayOfUnionToArrayOfUnionOfGeneric<T> =
T extends (infer U)[]
? MyWrapper<U>[]
: never;
type Inner = (1 | 2 | 3)[];
type Outer = ArrayOfUnionToArrayOfUnionOfGeneric<Inner> // MyWrapper<1 | 2 | 3>[]
// MyWrapper<1 | 2 | 3>[] --(HOW???)--> (MyWrapper<1>|MyWrapper<2>|MyWrapper<3>)[]https://stackoverflow.com/questions/65650306
复制相似问题