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

Typescript如何定义键名有已知前缀、完整键名未知的interface?

解答

你需要的接口完全可以实现,从TypeScript 4.1版本开始支持模板字面量类型作为索引签名,正好可以匹配指定前缀的未知完整键名。

你可以按照如下方式定义接口:

interface MyObject {
  name: string;
  [key: `added_${string}`]?: number[];
  [key: `removed_${string}`]?: number[];
}

其中 `added_${string}` 代表所有以added_为前缀、后续接任意字符串的键名,同理匹配removed_前缀的键名,后面加?标识这些动态键都是可选的,完全符合你预期的定义逻辑。

你给出的示例对象可以直接适配这个接口,不会有类型报错:

const demo: MyObject = {
  name: "",
  added_abc: [1,2,3],
  added_bcd: [2],
  removed_abcd: [4,5],
  removed_xyz: [],
}

注意事项

  • 如果你需要新增其他固定键,需要确保固定键的类型和动态索引签名的类型兼容,本示例中name是string类型,和动态键的number[]类型不存在冲突,可正常使用。
  • 低于4.1版本的TypeScript不支持模板字面量索引签名,需要升级TS版本后才能使用该写法。

内容的提问来源于stack exchange,提问作者d-_-b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:48:04