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

如何在TypeScript中从const衍生的Record类型排除指定键

TypeScript:创建排除指定枚举值的必填键Record类型

原始代码(OpenAPI生成)

export const MyConst = {
  A: 'a',
  B: 'b',
  C: 'c',
} as const;

export type MyConst = (typeof MyConst)[keyof typeof MyConst];

需求与问题

想要基于MyConst的值创建一个Record,要求:

  • 'a'和'b'为必填键
  • 不允许包含'c'键

最初直接使用Record<MyConst, string>会报错,因为缺少'c'键:

const mapper: Record<MyConst, string> = {
    [MyConst.A]: 'Test A',
    [MyConst.B]: 'Test B',
};

错误提示:Record类型中缺少'c'键

改用Partial<Record<MyConst, string>>可以规避错误,但会让所有键变为可选,不符合必填要求:

const mapperWithPartial: Partial<Record<MyConst, string>> = {
    [MyConst.A]: 'Test A',
    [MyConst.B]: 'Test B',
};

解决方案

可以通过Exclude工具类型从MyConst类型中排除'c'值,直接构造符合要求的Record类型:

const mapper: Record<Exclude<MyConst, typeof MyConst.C>, string> = {
    [MyConst.A]: 'Test A',
    [MyConst.B]: 'Test B',
};

或者先定义排除后的类型再使用:

// 排除MyConst中的C键对应的类型
type MyConstAllowed = Exclude<MyConst, typeof MyConst.C>;

const mapper: Record<MyConstAllowed, string> = {
    [MyConst.A]: 'Test A',
    [MyConst.B]: 'Test B',
};

这样定义的mapper会强制要求包含'a'和'b'键,同时不允许添加'c'键,完全符合需求。

内容的提问来源于stack exchange,提问作者Croviajo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:16:09