TypeScript中如何用字符串字面量引用命名接口构建注册表?
TypeScript 根据字面量键关联对应接口类型的注册表实现
先看你的场景:已经定义了两个接口,想要构建一个注册表,让每个以接口名为键的对象下,所有子项都对应到该接口类型。
首先需要建立字面量名称与对应接口类型的映射关系,这是核心步骤:
interface Int1 {} interface Int2 {} // 字面量到接口类型的映射,把接口名和接口本身绑定 type InterfaceMap = { "Int1": Int1, "Int2": Int2 }
接下来基于这个映射类型,就能写出你想要的RegistryType:
type RegistryType = { // 遍历InterfaceMap的所有键 [theKey in keyof InterfaceMap]: { // 子项的类型自动对应到当前键关联的接口 [x: string]: InterfaceMap[theKey] } }
现在用这个类型定义你的注册表,TypeScript会自动做类型校验:
const Registry: RegistryType = { "Int1": { "obj1": {}, "obj2": {} }, "Int2": { "obj1": {} } }
如果后续需要新增接口,只需要在InterfaceMap里添加新的键值对即可,比如新增Int3接口,就给InterfaceMap加上"Int3": Int3,RegistryType会自动适配。
内容的提问来源于stack exchange,提问作者FFaFafy
相关产品推荐
相关产品推荐

