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

TypeScript嵌套对象接口定义报错,寻求解决方案

TypeScript接口定义错误解决方法

错误原因

你当前的collectionInfo接口结构和实际数据完全不匹配:接口只声明了一个id属性,但你的recordCollection是以数字ID为键、专辑信息为值的对象,所以TypeScript会报错说1100这类键不是collectionInfo的已知属性。此外你写的string | number |;是语法错误,多了多余的竖线。

正确的接口写法

第一步:定义单个专辑的结构

因为不同专辑的字段不全(有的缺专辑名,有的缺歌手),所以所有属性都设为可选:

interface Album {
  albumTitle?: string;
  artist?: string;
  tracks?: string[];
}

第二步:定义整个唱片集的结构

用索引签名来允许任意数字作为键,对应的值遵循Album结构:

interface CollectionInfo {
  [id: number]: Album;
}

第三步:使用接口

现在你的数据就能正常匹配类型了:

const recordCollection: CollectionInfo = {
  1100: {
    albumTitle: "Prisoner",
    artist: "Lucky Dube",
    tracks: ["Prisoner", "Don't Cry"],
  },
  2468: {
    albumTitle: "Bridge Over Troubled Water",
    artist: "Simon & Garfunkel",
    tracks: ["Bridge Over Troubled Water", "Cecilia"],
  },
  1245: {
    artist: "Robert Palmer",
    tracks: [],
  },
  5439: {
    albumTitle: "ABBA Gold",
  },
};

关键说明

  • 索引签名[id: number]: Album:告诉TypeScript这个对象可以包含任意数字类型的键,每个键对应的值必须符合Album的结构。
  • 可选属性?:因为部分专辑缺少某些字段,必须加?标记为可选,否则TypeScript会报"缺少属性"的错误。
  • 类型精准性:你的实际数据里albumTitle、artist都是字符串,tracks是字符串数组,不需要允许number类型,除非有特殊需求,否则保持类型精准能帮你更早发现错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:16:23