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