了解TypeScript中特定的继承类型

问题描述 投票:0回答:1

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

class MyClass extends (FooClass as { new(): BarClass })
typescript typescript3.0
1个回答
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根本没有引用(提示:因为它在'type'空间中)。所以这里的FooClass引用了FooClass的值,但假设FooClass的值是{ new(): BarClass }类型。

换句话说,这里用于类型检查的类型只是{ new(): BarClass },但在运行时,MyClass实际上将扩展FooClass。我想这种区别真正有多大区别取决于FooClassBarClass的确切定义。

© www.soinside.com 2019 - 2024. All rights reserved.