为什么此Typescript子类不继承其父类实现的接口?

问题描述 投票:0回答:1

考虑以下打字稿代码:

interface MyInterface {
    foo?(x : string) : void;
}

class One implements MyInterface {
}

class Two extends One implements MyInterface {
    foo(x : number) : void {
    }
}

编译此将按预期引发错误:类型'Two'的属性'foo'无法分配给基本类型'MyInterface'的相同属性。

[当我删除第二类中的“ implements MyInterface”时,错误消失了。我本来希望类2从类1继承一个事实,即它实现了MyInterface,因此仍应与之兼容。

出于Java的背景,我认为我误解了TS中的类型系统,尤其是子类实例是否是“是”超类实例。为了验证,我在类One中添加了带有字符串参数的方法,但这引发了错误:类型'Two'中的属性'foo'无法分配给基本类型'One'中的同一属性-再次导致我TS子类与Java一样具有“ is-a”关系的结论。但这意味着我仍然不理解为什么类2不从类1继承其实现MyInterface的事实。

我怎么了?

typescript inheritance interface subclass
1个回答
0
投票

方法签名在您的接口和已实现的类中是不同的。您应该在名为Two的类中更改foo(x:string)。

interface MyInterface {
    foo?(x : string) : void;
}

class One implements MyInterface {
}

class Two extends One implements MyInterface {
    foo(x : string) : void {
    }
}
    
© www.soinside.com 2019 - 2024. All rights reserved.