我有一个带有抽象方法的抽象类。我发现如果我用prototype
和call
调用方法,Typescript不会抛出任何错误。例如:
abstract class Human{
age: string;
constructor(age: string){
this.age = age;
}
abstract name(): void
}
class Human1 extends Human{
constructor(age: string){
super(age);
this.name()
}
name(): void {
Human.prototype.name.call(this); // this is allowed despite that name is undefined/abstract
let a = "do something";
}
}
let a = new Human1("23")
有没有办法让Typescript在这里抛出错误?
1条答案
按热度按时间zf9nrax11#
我发现,如果我用
prototype
和call
调用该方法,Typescript不会抛出任何错误。是的,TypeScript在输入原型对象方面非常糟糕。它认为
Human.prototype
的类型为Human
1,因此它只考虑公共接口。abstract
修饰符只影响子类实现。有没有办法让Typescript在这里抛出错误?
是的,不要使用
.call
来调用父方法。有super
关键字:(Playground演示)
这不会编译,但会像预期的那样抛出错误“Abstract method 'name' in class 'Human' cannot be accessed via super expression.(ts 2513)”。
1:还请注意,它认为
Human.prototype.age
是一个数字,Human.prototype.constructor
是任何Function
,而不是typeof Human
。