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

如何在TypeScript中定义强制键名为驼峰式(camelCase)的类型或接口?

如何用TypeScript强制对象键为驼峰式格式

当然可以实现这个需求!TypeScript的模板字面量类型和递归类型组合起来,就能帮你严格约束对象的键必须遵循驼峰式(camelCase)命名规则。下面我给你详细拆解实现方案:

步骤1:定义驼峰式校验类型

首先我们需要一个类型来判断字符串是否符合驼峰式规则——首字母小写、不含下划线等分隔符,后续单词首字母大写:

// 校验字符串是否为驼峰式的类型
type IsCamelCase<S extends string> =
  // 排除包含下划线的字符串
  S extends `${string}_${string}` ? never :
  // 首字母必须是小写,提取剩余部分继续检查
  S extends `${Lowercase<string>}${infer Rest}` ?
    // 如果剩余部分以大写字母开头,递归检查后续字符
    Rest extends `${Uppercase<string>}${infer Rest2}` ? IsCamelCase<Rest2> : true
  : never;

步骤2:构建约束对象类型

接下来用这个校验类型来创建一个通用的对象类型,只允许符合驼峰规则的键:

// 约束键为驼峰式的对象类型
type CamelCaseObject<Value> = {
  [K in string as IsCamelCase<K> extends true ? K : never]: Value;
};

实际使用示例

现在你就可以像这样使用这个类型,不符合驼峰规则的键会直接在编译时报错:

// 假设你的值类型是这个
type OtherType = string;

// 合法的对象示例
const validObject: CamelCaseObject<OtherType> = {
  camelCaseKey: "这是合法的",
  userProfile: "也是合法的",
  itemId123: "带数字也没问题"
};

validObject.camelCaseKey; // ✅ 正常访问

// 不合法的情况(会报错)
const invalidObject: CamelCaseObject<OtherType> = {
  not_camel_case: "包含下划线,不合法", // ❌ 类型报错
  CamelCase: "首字母大写,不合法", // ❌ 类型报错
  hyphen-case: "连字符分隔,不合法" // ❌ 类型报错
};

补充说明

  • 这个方案是编译时校验,只能约束静态定义的键;如果是动态生成的键,需要在代码逻辑里额外处理。
  • 如果你想用接口实现,由于TypeScript接口的索引签名不支持这种条件约束,所以用类型别名(type)的方式是更合适的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:09:08