簡體   English   中英

如何獲得通用 class<t> typescript 的名字?</t>

[英]How to get Generic class<T> name of typescript?

我的通用 class

 export class BaseService<T> {
 public subUrl;
 constructor(public repo:RepogitoryService) { }
}

如何將 T 的 class 名稱存儲在局部變量中?

您必須了解Typescript只是一個編譯器(JavaScript的編譯器)。 一些語法糖(例如泛型)僅在類型檢查階段起作用(這對IDE /文本編輯器中的智能感知也很有幫助)。

但是,在運行時發生對變量的賦值,在運行時它只是純Javascript。 在運行時沒有類型,也沒有泛型。

但是,這是我最簡單的方法:

class Some<T> {
    private TName : string;
    constructor(x : T&Function) {
        this.TName = x.name;
    }
}

class Another {

}

const some = new Some<Another>(Another);

不幸的是,您不能。 Typescript是一個靜態類型檢查器,並且不像Java這樣在運行時支持類型反射。 這是因為其源代碼已轉換為javascript。

但是,希望通過新的打字稿功能(稱為“自定義轉換器”)在將來提供這種支持。 這些轉換器是掛接翻譯過程的插件,為獲取有關類型反射的豐富功能開辟了道路。 這樣的第一個例子是ts-transformer-keys

durisvk10解決方法涵蓋了該主題,只是想補充一點,我寧願使用
x: new () => Tx: T&Function

像這樣:

...
constructor(x : new () => T) {
    this.TName = x.name;
}    
...

Typescript 刪除了發出的 Javascript 中的所有類型信息(因此在運行時),但是由於 Typescript 的“轉換器”功能,現在可以編寫一個轉換器來在運行時公開此信息。 我已經做到了,請參閱https://typescript-rtti.org/ - 不需要裝飾器,它比 emitDecoratorMetadata 更全面

將對象強制轉換為Object並獲取構造函數名稱?

function nameOf(object: Object): string {
    return object.constructor.name;
}

暫無
暫無

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

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