Javascript 如何检查类B是否在运行时扩展了
在TypeScript/Javscript中,如何检查类B是否扩展了类AJavascript 如何检查类B是否在运行时扩展了,javascript,typescript,es6-class,Javascript,Typescript,Es6 Class,在TypeScript/Javscript中,如何检查类B是否扩展了类A class A { ... } class B extends A { ... } assert(B extends A) // How to do something like this? 回答: 有几种方法可以做到这一点。感谢@Daniel和@AviatorX B.prototype instanceof A // true Object.getPrototypeOf(B) === A
class A {
...
}
class B extends A {
...
}
assert(B extends A) // How to do something like this?
回答: 有几种方法可以做到这一点。感谢@Daniel和@AviatorX
B.prototype instanceof A // true
Object.getPrototypeOf(B) === A // true
Reflect.getPrototypeOf(B) === A // true
不确定TypeScript最惯用的方式是什么,或者是否有任何缺少的边缘情况,但对我的用例有效您可以使用来检查构造函数原型是否是A
的实例:
export class A {
}
export class B extends A {
}
console.log(B.prototype instanceof A);
为我输出
true
。B不是一个对象,它还没有被实例化。所以这是错误的<代码>(A的新B()实例)将是正确的,但我不想实例化它。在这种情况下,匹配原型应该可以工作。我已经更新了我的答案,你是想在设计时(如果B extensed a
在发出任何JS之前为false,那么就会出现编译时错误)还是在运行时(通过一些JS代码)?我们是在检查B
的原型链是否包含a
?或者我们正在检查TypeScript的B是否扩展了A
?这些是不同的(一个为真,另一个为假)您可以使用对象.getPrototypeOf(B)获取父类的名称。
它将返回对象,您可以从中获取有关B
父类的信息。如果接受的答案足够,那么这个问题实际上是关于JavaScript(ES2015+)而不是打字本本身。考虑更改标签。@ jCalz此类型检查是在运行时而不是编译,所以感谢您区分这两种情况。我做了编辑