[英]Is there a way to get the name of the generic type in a generic (<T>) function/class (Typescript)?
[英]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 () => T
比x: 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.