TypeScript实现带索引签名接口报错,咨询原因及实现方法
TypeScript接口实现报错原因及修正方案
报错核心原因
- 接口定义顺序错误:TypeScript按代码顺序解析类型,你把
I1接口定义在了类O之后,导致解析类O时无法识别I1类型,直接引发类型报错。 - 类型不兼容:
I1的索引签名要求所有属性值必须是字符串字面量类型"string",但你给m的属性值是"test",不符合该要求;I0要求类的所有公共属性都必须是I1类型,而你定义的m类型和I1不匹配,违反了接口实现规则。
修正方案
根据你的实际需求,分两种情况调整:
情况1:允许I1的属性值为任意字符串
如果你的真实需求是I1的属性值可以是任意字符串(而非固定的"string"字面量),修改I1的索引签名并调整接口顺序:
// 先定义I1,确保解析类O时能识别 interface I1 { [key: string]: string; } interface I0 { [key: string]: I1; } class O implements I0 { m: { p1: "test", p2: "test" } }
情况2:严格要求I1的属性值为"string"字面量
如果必须让I1的属性值固定为"string",则需要修改m的属性值,同时调整接口顺序:
interface I1 { [key: string]: "string"; } interface I0 { [key: string]: I1; } class O implements I0 { m: { p1: "string", p2: "string" } }
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

