2014-02-21 82 views
0

我有這樣的事情:檢查MyInterface的是的instanceof MyClass類型<T>

我發現類似的問題對SO:How can I check if element is an instanceof U?, 但它只是說明如何實現OfType<T>,不OfType<T<U>>

export class Foo implements IFoo 
{ 
    private _items:Array<MyInterface> = new Array<MyInterface>(); 

    public Something =() => 
    { 
     var myTypes = this.OfType<MyClass<TestModel>>(this._items); 
    } 

    private OfType = <T>(items:any[]) => 
    { 
     //here i would like to return all this._items that are T 
    } 
} 


export class TestModel 
{ 

} 

export class MyClass<T> 
{ 

} 

如何我會檢測類是T<U>類型嗎? 這個事件是否可能,如果nessecery我願意實施黑客?

+0

JsLinq具有OfType的實現。另外,請查看我在LINQ-to-TypeScript中的想法。 –

+0

@StephenChung你的意思是http://jslinq.codeplex.com/SourceControl/latest#Nuget/package/Content/Scripts/JSLINQ.js?我找不到OfType,除了現有的js庫不能使用打字稿泛型,因爲它們在編譯時被刪除。它必須是某種將類型傳遞給對象的模式。 – formatc

+0

糟糕。我的意思是Linqjs。抱歉! Linqjs是LINQ的完整實現,包括OfType運算符。它有TypeScript定義文件。 –

回答

3

不幸的是,如C#那樣,並且不能夠檢測如果一個類的類型爲T.
的測試是否JavaScript對象實現一個接口是使用duck-typing的唯一方法JavaScript沒有反射。即如果一個物體看起來像一隻鴨子,像鴨子一樣走路,像鴨子一樣呱呱叫,那麼它就是一隻鴨子。

Ross Harmes和Dustin Diaz在他們的書「Pro JavaScript Design Patterns」中解釋瞭如何通過測試給定類的屬性和方法來確定類是否實現接口。

看看這個JavaScript模式的博客 - 它顯示了TypeScript中的how to implement run-time type checking(各種反射)。

相關問題