我正在尝试扩展一个具有索引签名的接口。但是,当添加具有不同类型的新属性时,旧的索引签名会导致错误。可以重新定义旧的索引签名吗?
interface A {
a: number;
b: string;
[key: string]: number | string;
}
interface B extends A {
c: Function;
}错误:'Function‘类型的属性'c’不可分配给字符串索引类型'string |number‘。is (2411)
发布于 2019-03-31 00:01:08
如果B扩展了A,这意味着B必须在接受A的地方可用。
通过“扩大”定义,并不是每个B实例都与A兼容,因此这是不允许的。
通常,解决这类问题的关键是尽量避免索引签名。它经常被过度使用,几乎和any一样糟糕
发布于 2019-03-30 20:14:05
在A中,你对钥匙制定了一条规则,所以B必须遵守它
发布于 2019-03-30 23:56:19
据我所知,如果您使用的是interface,则无法覆盖索引签名。您可以使用类型别名和交集,因为类型别名允许重写属性。
您还需要打开typescript的--strictFunctionTypes检查才能使其正常工作。
interface A {
a: number;
b: string;
[key: string]: number | string;
}
type B = A & {
c: Function;
}https://stackoverflow.com/questions/55431255
复制相似问题