如何定义包含指定子类型键的动态TypeScript Extra类型?
定义动态可选的Extra类型
现有以下TypeScript子类型:
type material = string type weight = { unit: string value: number } type dimensions = { w: number h: number l: number unit: string }
需求是让Extra类型包含上述类型名称作为键,对应值为相应类型,同时Extra是动态类型,可包含其中1个或多个键,不允许出现未定义的键。
解决方案
通过Partial工具类型结合对象类型定义即可实现需求:
type Extra = Partial<{ material: material; weight: weight; dimensions: dimensions; }>
验证示例
- 符合要求的合法定义:
const Ext1: Extra = { material: "iron" } const Ext2: Extra = { material: "aluminium", dimensions: { w: 110, h: 30, l: 200, unit: "mm" } }
- 不符合要求的非法定义(包含未声明的
unknown_key,会触发TypeScript类型检查错误):
const Ext3: Extra = { material: "iron", unknown_key: unknown_value }
说明
Partial<T>工具类型会将目标类型T的所有属性转为可选状态,让Extra可以灵活包含指定键中的任意1个或多个。- 明确绑定每个键与对应类型,既保证赋值时的类型匹配,也直接限制了不能添加未定义的额外键。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

