2016-04-11 81 views
4

這裏是我的函數的定義:有沒有辦法在泛型(<T>)函數/類(Typescript)中獲取泛型類型的名稱?

getData<T extends Entity>() { } 

我目前不接受任何參數。有沒有辦法讓我在運行時將T轉換爲類型的字符串名稱?也許使用typeof?

我來自C#世界,你會使用反射。不過,我是Javascript新手,不確定相應的內容。

感謝。

+0

如果沒有參數那麼你爲什麼需要有類型? –

+0

我需要編寫一個url字符串,其中的一部分是類T的名稱。我將返回一個泛型類型的對象:例如,結果。 –

+0

也許可以重寫'toString()'方法嗎? – kemsky

回答

2

類型在編譯期間被擦除,所以沒有。你應該從未曾經有沒有在辯論中的位置使用其類型參數的通用函數。

假設在班getData的作品,你可以寫這樣的:

class NotSureThisIsReallyAGoodIdea { 
    static getData<T>(cls: new(...args: any[]) => T): T { 
     /* magic happens */ 
     const url = 'http://example.com/' + cls['name']; 
     return <T>undefined; 
    } 
} 

class SomeShape { 
    x: number; 
} 

let s = NotSureThisIsReallyAGoodIdea.getData(SomeShape); 
s.x; // OK 
+0

這對我有用,謝謝。 getData (type:{new():T;})let d = new type(); let name:string = d.getName(); } (不知道如何格式化代碼示例) –