簡體   English   中英

如何在 Typescript 中獲取 class 的通用參數類型

[英]How to get Generic Parameter Type of class in Typescript

我想獲取一些 class 的通用參數類型,例如:

class ClassA<T> {
    value!: T;

    getParameterType()  {
        return <type of T>;
    }
}

getParameterType方法返回T的Class類型,怎么辦? 還是有其他方法?

您不能在 Typescript 中返回類型,因為類型不是值。 Typescript 編譯為 Javascript 所以類型不存在那里。 當我編譯你的代碼時你得到的錯誤(當我將 'type' 和 'of' 連接到typeof時)說:

'T' 僅指一種類型,但在這里用作值。

這是完全正確的,您只能返回值並使用這些值來執行操作。 你不能返回一個類型。 這與編寫以下 function 相同:

function wrong() {
    return string // You can return 'hello world'
}

你不能說return string

另請查看 typescript 代碼在編譯時會發生什么:

let x: string = 'hello world'變成 Javascript let x = 'hello world'類型消失了!

解決方案

您正在尋找的是一種從ClassA中提取泛型參數T的類型, typescript 具有關鍵字infer ,它允許您獲取任何類型的類型參數。

type getType<T> = T extends ClassA<infer U>? U: never

並像這樣使用它:

type Test = getType<ClassA<string>> Test 的類型是字符串

筆記:

注意類型和值的差異,它們不是同一個東西,對待完全不同。

暫無
暫無

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

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