检查MyInterface是否为MyClass <t> </t>类型的实例

时间:2014-02-21 14:05:46

标签: javascript typescript

我有这样的事情:

我在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,我愿意实施黑客攻击吗?

1 个答案:

答案 0 :(得分:3)

不幸的是,JavaScript没有像C#那样的反射,并且无法检测类是否为类型T. 测试JavaScript对象是否实现接口的唯一方法是使用duck-typing。也就是说,如果一个物体看起来像一只鸭子,像鸭子一样走路,像鸭子一样嘎嘎叫,那么它就像一只鸭子。

在他们的书“Pro JavaScript Design Patterns”中,Ross Harmes和Dustin Diaz解释了如何通过测试给定类的属性和方法来确定类是否实现了接口。

查看我的博客,了解这个JavaScript模式 - 在TypeScript中显示how to implement run-time type checking(反映各种类型)。