有人可以解释一下TypeScript中的这种继承是什么意思吗?有没有机会为extends关键字之后的所有内容创建别名?
class MyClass extends (FooClass as { new(): BarClass })
答案 0 :(得分:0)
请记住,TypeScript中的类既存在于“值”空间(在运行时存在的对象的领域)中,又存在于“类型”空间(仅在编译时存在的概念的领域)中。考虑一下如何将其编译到ES5:
class MyClass extends (FooClass as { new(): BarClass }) { }
成为:
var MyClass = /** @class */ (function (_super) {
__extends(MyClass, _super);
function MyClass() {
return _super !== null && _super.apply(this, arguments) || this;
}
return MyClass;
}(FooClass));
请注意,FooClass
作为类型定义惯用法的一部分传入,作为对_super
类的引用,但是BarClass
根本没有被引用(提示:因为它在“类型”空间)。因此,这里的FooClass
引用了FooClass
的 value ,但假设FooClass
的值是{ new(): BarClass }
类型。
换句话说,此处用于类型检查的类型仅为{ new(): BarClass }
,但是在运行时,MyClass
实际上将扩展FooClass
。我想这种区别的真正区别有多少取决于FooClass
和BarClass
的确切定义。