正确的构造函数对象类型

时间:2018-10-30 10:04:16

标签: typescript types

我有以下对象:

export const PageConstructors: {[index: string]: any} = {
    [PageName.MAIN] : MainPage,
    [PageName.SCOREBOARD] : ScoreboardPage,
};

MainPage和ScoreboardPage都是Page的子级。我想用正确的类型替换any。但是,我为找到正确的打字稿语法感到困惑。我尝试了new<T extends Page>() => T的各种组合,但没有碰到运气。这可能吗?

1 个答案:

答案 0 :(得分:1)

构造函数本身不是通用的。您的构造函数签名可以返回基类。

class Parent {
    constructor() {

    }
}
class Child extends Parent {
    constructor() {
        super();        
    }
}


const constructors: { [index: string]: new () => Parent } = {
    test: Child,
}

如果构造函数可以接受参数,则可以其余anyunknown

const constructors: { [index: string]: new (...a:unknown[]) => Parent } = {
    test: Child,
}