You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写通用泛型类型以约束所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:19:01