如何定义将类型作为强类型参数的Typescript函数

时间:2019-05-01 08:16:28

标签: typescript inheritance strong-typing typescript3.0

我想创建一个函数,该函数采用扩展特定类型的类型(使用export class创建并正常导入)。我有一个Page类和许多派生类。用简单的英语来说,我想让一个函数接受PageDerivedPageAnotherDerivedPage classes (不是实例),显然是在尝试避免{{ 1}},并保持强力打字。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果只需要类Page,DerivedPage,AnotherDerivedPage;您可以使用以下方法:

function foo (foo: Page | DerivedPage | AnotherDerivedPage)

如果您想要扩展Page的参数,则可能是以下方法:

function foo<T extends Page> (a: T) { ... }

编辑:
添加此类示例以与箭头功能一起使用

type foo<T extends Page> = (v: T) => void
const fn: foo<DeribedPage> = (v) => { /* ... */ }

答案 1 :(得分:1)

您只需要使用构造函数签名:

sudo service apache2 restart

根据需要,您还可以创建一个更通用的版本来保留参数和类类型:

class Page {
    private p!: string;
}
class DerivedPage extends Page { }
class OtherPage extends Page { 
    constructor(param: number){
        super();
    }
}
class NotPage { private np!: string; }

function createPage(ctor: new (...a: any[])=> Page, ...a: any[]) {
    new ctor(...a);
}