TypeScript如何为单个变量(非对象)创建Interface类型定义
TypeScript 复用字面量联合类型实现方案
interface 本身的定位是描述对象、类的结构契约,不支持为单个字面量、联合类型这类非结构类型定义可复用的类型,要实现你要的效果,直接用 type 关键字声明类型别名即可,这也是TypeScript针对这类场景的标准推荐写法。
具体实现
在公共作用域或对应模块内一次性定义可复用的联合类型别名,后续所有需要用到该类型约束的场景直接引用别名即可,不需要重复书写联合成员:
// 一次性定义可复用的日期单位类型 type DateUnit = 'day' | 'week' // 变量声明时直接引用类型 const date: DateUnit = 'day' const otherDate: DateUnit = 'week' // 赋值非法值时TS会直接抛出类型错误,例如下方代码就会触发校验报错 // const errorDate: DateUnit = 'month' // 函数参数、返回值场景也可以直接复用该类型 function formatDate(unit: DateUnit, timestamp: number) { // 对应业务逻辑 }
补充说明
- 类型别名和interface在对象类型定义场景下大部分可以互换,但涉及联合类型、字面量类型、基础类型别名、元组类型的复用时,类型别名是唯一的原生支持方案
- 如果后续需要扩展联合类型的成员,直接修改
DateUnit的定义即可,所有引用该类型的位置会自动同步类型校验规则,不需要逐个修改
内容的提问来源于stack exchange,提问作者Abhay Singh
相关产品推荐
相关产品推荐

