了解TypeScript中的特定继承类型

时间:2019-03-04 20:18:12

标签: typescript typescript3.0

有人可以解释一下TypeScript中的这种继承是什么意思吗?有没有机会为extends关键字之后的所有内容创建别名?

class MyClass extends (FooClass as { new(): BarClass })

1 个答案:

答案 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。我想这种区别的真正区别有多少取决于FooClassBarClass的确切定义。