我有一个类型的集合。我希望它们中的一些被映射到原始类型,如果它存在特定类型的原始类型。否则应该使用 Type 本身。
我试过了:
type RawTypes = {
MyTypeA: MyTypeARaw,
// MyTypeB: Use MyTypeB
MyTypeC: Partial<MyTypeC>,
// MyTypeD: Use MyTypeD
MyTypeE: DeepPartial<MyTypeE>,
MyTypeF: Omit<MyTypeF, "extended">,
};
export type MappedType<T> = T extends keyof RawTypes ? RawTypes[T] : T;
// How I want to use it:
let a: MappedType<MyTypeA>;
这不起作用,因为 RawTypes 的键是字符串。
// Using a string-literal makes mapped type work
let a: MappedType<"MyTypeA">;
// Using of type makes fallback-version work
let b: MappedType<MyTypeB>;
仅用于编译时类型检查。
有没有办法做到这一点?
答案 0 :(得分:0)
我去跑步,这让我清醒了,我想出了这个解决方案:
export type MappedType<T> =
T extends MyTypeA ? MyTypeARaw :
// MyTypeB: Use MyTypeB
T extends MyTypeC ? Partial<MyTypeC> :
// MyTypeD: Use MyTypeD
T extends MyTypeE ? DeepPartial<MyTypeE> :
T extends MyTypeF ? Omit<MyTypeF, "extended"> :
T;
现在我可以将它们用于:
let a: MappedType<MyTypeA>; // Will be MyTypeARaw
let b: MappedType<MyTypeB>; // Will be MyTypeB