You need to enable JavaScript to run this app. TypeScript如何从自定义类型定义键值严格匹配的常量?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:06:10