有人可以解释一下TypeScript中的这种继承是什么意思吗?有没有机会为extends keyword之后的所有内容创建别名?
class MyClass extends (FooClass as { new(): BarClass })
重要的是要记住,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
根本没有引用(提示:因为它在'type'空间中)。所以这里的FooClass
引用了FooClass
的值,但假设FooClass
的值是{ new(): BarClass }
类型。
换句话说,这里用于类型检查的类型只是{ new(): BarClass }
,但在运行时,MyClass
实际上将扩展FooClass
。我想这种区别真正有多大区别取决于FooClass
和BarClass
的确切定义。