TypeScript允许任何在参数中扩展另一个类的类

时间:2017-01-20 04:48:43

标签: typescript decorator

class BaseRouter {
    protected $decoratedRoutes[];
}

@SomeDecorator
class APIRouter extends BaseRouter {}


function SomeDecorator <ExtendedRouter extends BaseRouter>(extendingClass: ExtendedRouter) {}


error TS2345:
src/Server/Routes/Api/V1/System/index.ts(7,2): error TS2345: Argument of type 'typeof APIRouter' is not assignable to parameter of type 'BaseRouter'.
Property '$decoratedRoutes' is missing in type 'typeof ApiRouter'.

我在<ExtendedRouter extends BaseRouter>中创建的界面只是浏览一些示例的猜测。如何正确地允许在装饰器内传递BaseRouter的任何类?代码当然工作正常,因为在我的express.js应用程序中切换到装饰器模式,我只有70多个错误。

2 个答案:

答案 0 :(得分:0)

因为这些类是多态的,所以你可以指定BaseRouter和子类(以及从它们派生的类)都可以接受......

class BaseRouter {
    protected example: string;
}

@SomeDecorator
class APIRouter extends BaseRouter { }

@SomeDecorator
class AnotherRouter extends APIRouter { }


function SomeDecorator<BaseRouter>(extendingClass: BaseRouter) {

}

答案 1 :(得分:0)

经过一些更多的研究和研究,我发现这是最好的工作:

class BaseRouter {
    protected $decoratedRoutes[];
}

@SomeDecorator
class APIRouter extends BaseRouter {}


function SomeDecorator <ExtendedRouter extends BaseRouter<any>>(extendingClass: ExtendedRouter) {}
相关问题