首页 > 解决方案 > 如何在 Typescript 中用静态变量表达构造函数?

问题描述

我有以下类,我想在不同的文件中访问:

export class Person {

    constructor() {}

    static getDatabaseId(): string {
        return '...';
    }
}

它是注入的,而不是实际导入的。我想说明它是一个构造函数,它可以创建Person类型的新实例。这是我尝试过的:

let PersonConstructor: {new(): Person};

// inject Person constructor function
beforeEach(inject((_Person_) => {
    PersonConstructor = _Person_;
}));

// create a new instance but also access the static variables
const p: Person = new PersonConstructor();
PersonConstructor.getDatabaseId(); // "property does not exist"

编译器不再抱怨从Person实例化新实例,但当然它现在也不知道Person的静态变量,因为它们在新声明的类型上丢失了。

如何正确输入?

标签: javascripttypescriptclasstypes

解决方案


我不确定您的代码的最终目标是什么。从TypeScript文档开始,您试图实现的语法的一种可能用法是修改static类的成员并使用新的静态成员创建新实例。

如果您要这样做,那么正确的代码将如下所示

let PersonConstructor: typeof Person = Person;

// create a new instance but also access the static variables
const p: Person = new PersonConstructor();
PersonConstructor.getDatabaseId(); // Also OK and you my change it. Original Person will not get it changed.

推荐阅读