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

如何让TypeScript中Record的值与键严格匹配?

问题:如何让Record的值与对应键严格匹配?

我定义了如下User接口及对应的Record类型代码:

interface User {
  email: string;
  name: string;
}

const UserRecord: Record<keyof User, keyof User> = {
  email: 'email',
  name: 'name',
};

但这段代码的值部分没有类型安全性,比如我可以写出不符合预期的代码:

const UserRecord: Record<keyof User, keyof User> = {
  email: 'name',
  name: 'email',
};

请问如何实现让Record的值与对应的键严格匹配?

解决方案

不要用Record类型,改用映射类型约束每个键的值必须和键本身完全一致。具体实现如下:

interface User {
  email: string;
  name: string;
}

// 定义映射类型,每个键 K 的值类型限定为 K 本身
type KeyMirror<T> = {
  [K in keyof T]: K;
};

// 使用该类型声明 UserRecord
const UserRecord: KeyMirror<User> = {
  email: 'email',
  name: 'name',
};

这样如果尝试给email赋值'name',TypeScript会直接抛出类型错误,确保每个键的值和键严格匹配。

如果想要更简洁的写法,也可以直接在声明时使用映射类型,无需单独定义KeyMirror:

const UserRecord: { [K in keyof User]: K } = {
  email: 'email',
  name: 'name',
};

这种方式的核心是利用TypeScript映射类型特性,为每个键单独指定值类型为键的字面量类型,避免了Record让所有键共享同一值类型的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:45:55