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

如何将字符串字面量类型映射为对应TypeScript类型?

如何创建与字符串字面量类型同步的映射类型?

完全可行,TypeScript的映射类型机制正好能实现这个需求,你写的代码存在语法错误,下面是正确的实现方式:

原代码问题说明

你混淆了TypeScript类型定义和变量赋值的语法,类型定义不能用=直接赋值对象字面量,映射类型需要通过类型关联逻辑来绑定键与对应类型。

正确实现方案

我们可以通过类型映射表+映射类型的组合来实现自动同步:

  1. 先保留你的基础类型定义:
type ConfigurationTypes = 'test' | 'mock';

type MockType = { id: string };
type TestType = { code: string };
  1. 创建一个类型映射表,明确每个字面量键对应的具体类型:
// 键与对应类型的关联表
type TypeMap = {
  test: TestType;
  mock: MockType;
};
  1. 利用映射类型遍历ConfigurationTypes的所有键,自动关联对应类型:
type MappedConfigurationTypes = {
  [Key in ConfigurationTypes]: TypeMap[Key];
};

同步效果说明

当ConfigurationTypes发生变更时(比如新增'prod'字面量),只需要在TypeMap中添加对应的prod: ProdType,MappedConfigurationTypes就会自动同步包含该键的类型定义;如果忘记在TypeMap中新增对应类型,TypeScript会直接抛出类型错误,强制你同步更新,避免出现遗漏。

简化写法(适合少量键的场景)

如果你的字面量键数量很少,也可以直接用条件类型合并成一行:

type MappedConfigurationTypes = {
  [Key in ConfigurationTypes]: Key extends 'test' ? TestType : MockType;
};

验证示例

使用这个类型时,TypeScript会严格校验每个键的类型:

const config: MappedConfigurationTypes = {
  test: { code: '123' }, // 必须符合TestType结构
  mock: { id: '456' }   // 必须符合MockType结构
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:05:42