如何在 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的静态变量,因为它们在新声明的类型中丢失。


如何正确输入?


海绵宝宝撒
浏览 228回答 2
2回答

动漫人物

您可以使用构造函数签名方法,但您需要添加您需要访问的任何其他成员。import {Person} from './Person';let PersonConstructor: {    new(): Person    getDatabaseId(): string} = Person;// create a new instance but also access the static variablesconst p: Person = new PersonConstructor();PersonConstructor.getDatabaseId(); // "property does not exist"或者,typeof Person如果您想使用与Person(构造函数签名和所有静态)完全相同的类型,则可以使用:import {Person} from './Person';let PersonConstructor: typeof Person = Person;// create a new instance but also access the static variablesconst p: Person = new PersonConstructor();PersonConstructor.getDatabaseId(); // "property does not exist"

慕码人2483693

我不确定您的代码的最终目标是什么。从TypeScript doc 开始,您尝试实现的一种可能的语法用法是修改static类的成员并使用新的静态成员创建新实例。如果你打算这样做,正确的代码看起来像let PersonConstructor: typeof Person = Person;// create a new instance but also access the static variablesconst p: Person = new PersonConstructor();PersonConstructor.getDatabaseId(); // Also OK and you my change it. Original Person will not get it changed.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript