typescript - Typescript:将 Type 映射到 RawType,并回退到 Type
问题描述
我有一个类型的集合。如果存在特定类型的原始类型,我希望其中一些映射到原始类型。否则应该使用 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>;
它仅用于编译时类型检查。
有没有办法做到这一点?
解决方案
我去跑步,这让我头脑清醒,我想出了这个解决方案:
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
推荐阅读
- php - 刷新页面时如何防止SQL查询再次执行?
- c# - 如何通过单击进入 ItemsControl MVVM 更改 TextBlock 的数据绑定?
- android - ExpandableListView 点击事件不起作用
- progressive-web-apps - Progressive Web App“清单不包含合适的图标”
- rest - @RequestParam javax 验证 junit REST 控制器测试
- java - 使用 XSLT 将 XML 输出转换为 HTML 表
- sql - Oracle Exception 的位置很重要吗?
- google-cloud-storage - GSutil RSync - 更改最大文件路径限制以匹配 Windows
- sql-server - 关键字“with”附近的语法不正确。提出的解决方案没有任何好处
- spring - 如何在 AOP 建议中将日志保存到数据库