如何编写通用泛型类型以约束所有const断言的对应值?
封装通用ValueType泛型获取const常量的值类型
定义通用泛型
直接声明ValueType泛型,复用提取值类型的逻辑:
type ValueType<T extends Record<string, unknown>> = T[keyof T];
使用示例
1. 字符串类型的const常量
// 用const断言定义常量 const GENDER = { MALE: 'male', FEMALE: 'female', OTHER: 'other' } as const; // 快速获取值类型 type GenderType = ValueType<typeof GENDER>; // 实际类型等价于:'male' | 'female' | 'other' // 用该类型约束变量 let userGender: GenderType = 'male'; // 合法赋值 // userGender = 'unknown'; // 类型错误,不允许赋值非枚举值
2. 数字类型的const常量
const STATUS = { SUCCESS: 200, FAIL: 400, ERROR: 500 } as const; type StatusType = ValueType<typeof STATUS>; // 实际类型等价于:200 | 400 | 500 let responseStatus: StatusType = 200; // 合法
泛型说明
T extends Record<string, unknown>确保传入的类型是对象结构,避免非对象类型导致的错误T[keyof T]自动提取对象所有键对应的值的联合类型,完全替代重复编写的typeof XXX[keyof typeof XXX]样板代码
内容的提问来源于stack exchange,提问作者Vinay Sharma
相关产品推荐
相关产品推荐

