意思是你不能用這樣的東西?Typescript泛型是否使用類型擦除來實現泛型?
class Helpers
{
static ObjectAs<T>(val: any): T {
if (!(val instanceof T)) {
return null;
}
return <T>val;
}
}
任何解決方法來獲取泛型聲明的基礎類型?
更新1:
萊恩卡瓦諾提到的,在編譯時,整個系統類型被擦除,更像是Java的泛型實現的。我相信.Generics的Net實現在編譯代碼中保留類型信息比Java更好。 但是,我忍不住想知道,爲什麼不能在TypeScript中允許對泛型類型和泛型類型參數進行完整的運行時自檢?爲什麼TypeScript的設計者決定在運行時刪除所有通用類型信息?
以下打字稿代碼:
function As<T>(n: any): T {
if (n instanceof T) {
return n;
} else {
return null;
}
}
var obj: Object = 1;
var x = As<number>(obj);
可以轉換爲這段JavaScript代碼:
function As(n, T) {
if (n instanceof T) {
return n;
} else {
return null;
}
}
var obj = 1;
var x = As(obj, Number);
保留在運行,並與JS代碼兼容性類型的信息!
更新2: 我已經張貼在CodePlex上的問題,希望能得到更多的從打字稿人 https://typescript.codeplex.com/discussions/550262
多麼真棒問題...希望它並不封閉,從而風格 –
第2頁的JavaScript是由編譯器發射前的所有類型的信息將被刪除的規範狀態。鑑於這個信息我最好的猜測會說你的instanceof操作符在運行時環境中是沒有意義的。我最好的建議是在討論規範的論壇中創建一個帖子:http://typescript.codeplex.com/discussions/topics/5488/language-specification。如果尚未支持,可能會讓他們考慮支持。 –
@ErikNedwidek已經在此:) –