TypeScript如何从自定义类型定义键值严格匹配的常量?
问题原因
你定义的Record<Uppercase<StatusType>, Capitalize<StatusType>>类型只是将所有键的取值统一限制为'Active' | 'Pending'联合类型,没有建立单个键和对应取值的绑定关系,因此值只要属于联合类型就能通过校验,自然允许错配。
解决方案
使用映射类型逐个遍历原始枚举值,为每个键单独绑定对应的值类型,就能实现一一对应的严格校验:
type StatusType = 'active' | 'pending'; // 映射类型实现键值一一绑定 type Status = { [K in StatusType as Uppercase<K>]: Capitalize<K> }; // 正确写法 无报错 const UserStatus: Status = { ACTIVE: 'Active', PENDING: 'Pending' } // 错误写法 会触发TS报错:不能将类型“"Active"”分配给类型“"Pending"” const BadUserStatus: Status = { ACTIVE: 'Active', PENDING: 'Active' }
内容的提问来源于stack exchange,提问作者DFM
相关产品推荐
相关产品推荐

