有什麼辦法,我該如何檢測一些對象是否實現了一些接口?動態檢測TypeScript中的對象實現接口
if(myObj implements IMyInterface) {
//... do something
}
有什麼辦法,我該如何檢測一些對象是否實現了一些接口?動態檢測TypeScript中的對象實現接口
if(myObj implements IMyInterface) {
//... do something
}
是。現在,您可以使用TypeScript編譯器的增強版本來執行此操作,從而使您可以知道哪個接口可以實現應用程序的每個類。此版本的編譯器將所有類型的信息存儲到運行時,並將這些信息鏈接到實際的構造函數。例如,您可以編寫類似如下:
function implementsInterface(object: Object, target: Interface) {
const objClass: Class = object.constructor && object.constructor.getClass();
if (objClass && objClass.implements) {
let found = false;
for (let base of objClass.implements) {
let found = interfaceExtends(base, target);
if (found) {
return true;
}
}
}
return false;
}
// recursive interface inheritance check
function interfaceExtends(i: Interface, target: Interface) {
if (i === target) {
return true;
}
if (i.extends) {
let found = false;
for (let base of i.extends) {
// do a recursive check on base interface...
found = interfaceExtends(base, target);
if (found) {
return true;
}
}
}
return false;
}
你可以找到適合您的需要here
號
目前,類型只在開發和編譯時使用。 類型信息不會以任何方式轉換爲已編譯的JavaScript代碼。
隨着編譯器生成一些代碼,這是可能的。目前,TypeScript團隊正在嘗試向最終JavaScript添加儘可能少的代碼,例外是「擴展」關鍵字,它爲編譯後的輸出添加了一種新方法。
是的,你可以用組合的類型驗證這樣做一個完整的工作示例。看看這個庫:https://github.com/pelotom/runtypes
它是否適用於對象文字? –
是的。如果您必須測試的對象不是類的實例,則可以逐字段進行檢查。你傳遞給方法的接口元對象會告訴你所有的細節(可選的字段等等),你可以檢查那些對象。這種檢查速度較慢,但會起作用。作爲起點,請參閱[this](https://github.com/pcan/reflec-ts-examples/tree/master/simple-validator)示例。 – pcan
它是否適用於空接口? –