簡體   English   中英

如何在Typescript中使用靜態變量表達構造函數?

[英]How can I express a Constructor Function with static variables in 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的靜態變量,因為它們在新聲明的類型上丟失了。

如何正確鍵入?

我不確定您的代碼的最終目標是什么。 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.

您可以使用構造函數簽名方法,但需要添加需要訪問的任何其他成員。

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"

或者,如果要使用與Person完全相同的類型(構造函數簽名和所有靜態變量),則可以只使用typeof 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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM