我有这样的事情:
我在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 :(得分:3)
不幸的是,JavaScript没有像C#那样的反射,并且无法检测类是否为类型T. 测试JavaScript对象是否实现接口的唯一方法是使用duck-typing。也就是说,如果一个物体看起来像一只鸭子,像鸭子一样走路,像鸭子一样嘎嘎叫,那么它就像一只鸭子。
在他们的书“Pro JavaScript Design Patterns”中,Ross Harmes和Dustin Diaz解释了如何通过测试给定类的属性和方法来确定类是否实现了接口。
查看我的博客,了解这个JavaScript模式 - 在TypeScript中显示how to implement run-time type checking(反映各种类型)。