为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Typescript 中用静态变量表达构造函数?

如何在 Typescript 中用静态变量表达构造函数?

海绵宝宝撒 2021-06-01 14:10:02
我想在不同的文件中访问以下类:export class Person {    constructor() {}    static getDatabaseId(): string {        return '...';    }}它被注入而不是实际导入。我想说明它是一个构造函数,并且它可以创建Person类型的新实例。这是我尝试过的:let PersonConstructor: {new(): Person};// inject Person constructor functionbeforeEach(inject((_Person_) => {    PersonConstructor = _Person_;}));// create a new instance but also access the static variablesconst p: Person = new PersonConstructor();PersonConstructor.getDatabaseId(); // "property does not exist"编译器不再抱怨从Person实例化新实例,但当然它现在也不知道Person的静态变量,因为它们在新声明的类型中丢失。如何正确输入?
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

您可以使用构造函数签名方法,但您需要添加您需要访问的任何其他成员。


import {Person} from './Person';


let PersonConstructor: {

    new(): Person

    getDatabaseId(): string

} = Person;


// create a new instance but also access the static variables

const 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 variables

const p: Person = new PersonConstructor();

PersonConstructor.getDatabaseId(); // "property does not exist"


查看完整回答
反对 回复 2021-06-03
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我不确定您的代码的最终目标是什么。从TypeScript doc 开始,您尝试实现的一种可能的语法用法是修改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.



查看完整回答
反对 回复 2021-06-03
  • 2 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信