TypeScript:如何将TextBlockType的取值转为IFormats的可选属性键?
如何将联合类型作为可选属性的键定义类型?
要实现把TextBlockType的取值作为可选属性键的类型,有两种简洁的方式:
方法一:在映射类型中直接添加可选标记
直接在映射的属性后面加上?,就能让每个生成的属性变为可选:
type TextBlockType = 'markdown' | 'test' | 'presentation'; type FormatsType = { [key in TextBlockType]?: string; };
这样生成的FormatsType就会包含markdown?、test?、presentation?三个可选的字符串属性,完全符合需求。
方法二:使用内置工具类型Partial
TypeScript提供了内置的Partial<T>工具类型,它的作用是将传入类型T的所有属性转为可选。你可以把已有的映射类型传入Partial:
type TextBlockType = 'markdown' | 'test' | 'presentation'; type FormatsType = Partial<{ [key in TextBlockType]: string; }>;
这种方式适合你已经定义了基础的必填属性类型,需要快速转为可选的场景。
补充说明
你之前尝试的接口形式interface IFormats { [index: TextBlockType]: string; }无法实现可选属性,因为接口的索引签名会强制要求所有该类型的键对应的属性必须存在,没有直接转为可选的语法支持,因此推荐使用映射类型的方案。
内容的提问来源于stack exchange,提问作者Loki Loki
相关产品推荐
相关产品推荐

