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

如何为TypeScript接口的所有属性统一定义类型?

解决国际化字符串接口重复定义类型的问题

当然有办法啦!在TypeScript里,我们可以用两种方式轻松搞定这个重复写: string的麻烦,完美适配你有几百个字符串属性的场景:

方案一:索引签名(适合不限制具体键名的场景)

如果你的接口只需要保证所有属性值都是字符串,不需要严格限定键名,可以直接用索引签名:

interface ILocaleStringsProvider {
  [key: string]: string;
}

这种写法非常简洁,任何字符串类型的键对应的属性值都会被自动推断为string类型。不过要注意,它不会约束你必须包含哪些特定的键(比如foo、bar这些),如果需要严格控制键名的话,看下面的方案。

方案二:映射类型+联合类型(适合严格约束键名的场景)

如果你需要确保接口必须包含指定的几百个键,同时每个键的类型都是string,可以先把所有键名定义成一个联合类型,再结合Record映射类型来生成接口:

// 先把所有需要的字符串键名列成联合类型
type LocaleKeys = 'foo' | 'bar' | 'baz' | 'blablabla' /* 这里继续加其他几百个键 */;

// 用Record快速生成每个键对应string类型的接口
interface ILocaleStringsProvider extends Record<LocaleKeys, string> {}

// 或者直接用类型别名也可以
// type ILocaleStringsProvider = Record<LocaleKeys, string>;

这种方式的好处是:既严格约束了接口必须包含哪些键,又不用逐个写: string,以后要新增或修改键名,只需要在LocaleKeys里调整就行,维护起来特别方便。

进阶:混合其他类型属性

如果你的接口除了这些国际化字符串,还需要其他类型的属性,也可以混合写法:

type LocaleKeys = 'foo' | 'bar' | 'baz' | 'blablabla';

interface ILocaleStringsProvider extends Record<LocaleKeys, string> {
  // 这里可以添加其他非字符串类型的属性
  currentLocale: 'zh-CN' | 'en-US';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:04:12