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

TypeScript中如何基于指定类型定义限定键范围的interface接口

你之前的写法存在问题的核心原因是:keyof 运算符用于获取对象类型的键集合,而FruitTypes本身就是字符串字面量联合类型,不需要用keyof包裹,直接将它作为键的类型即可。

方案1:使用内置Record工具类型(推荐)

Record是TS官方提供的内置工具类型,专门用于快速构造「指定键类型、指定值类型」的对象类型,写法最简单:

type FruitTypes = "bananna" | "apple" | "orange";
// 定义键为FruitTypes成员、值为任意类型的对象类型
type FruitInterface = Record<FruitTypes, any>;

如果允许部分FruitTypes的键不出现,可以在外层套Partial工具类型:

type FruitInterface = Partial<Record<FruitTypes, any>>;

方案2:使用interface定义(TS 4.4及以上版本支持)

如果必须使用interface语法而非type定义,可以直接在映射索引中使用联合类型:

type FruitTypes = "bananna" | "apple" | "orange";

interface FruitInterface {
  [key in FruitTypes]: any
}

以上两种写法都可以达到你要的校验效果:不在FruitTypes里的键(比如示例中的mango)会直接抛出类型错误。
注意:你示例中的FruitTypes里写的appple (多了一个p、末尾带空格)和实际对象里的apple拼写不一致,会导致额外的类型错误,需要先修正拼写问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:18:02