亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 247 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號