在Typescript中迭代特定接口的项目

时间:2016-05-16 19:41:04

标签: typescript

假设我有一个实现IItem接口的对象数组:

interface IItem {
  getId() : string;
}

interface ISortableItem extends IItem {
  getSortIndex() : number;
}

var items : IItem[] = [ ... ];

现在我只想获得实现ISortableItem界面的项目,但我不认为这些信息在运行时可用。我可以使用这样的东西:

for (var i of items) {
  if ((<ISortableItem>i).getSortIndex) {
    ...
  }
}

虽然它有效但我的程序员心脏开始流血;-)有没有更优雅的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我建议在你的情况下使用课程。

class Item {
   getId() { .. }
}

class SortableItem extends Item {
   getSortIndex() { ... }
}

...

items.filter( item => item instanceof SortableItem )

通过执行此操作,您将允许在运行时和编译时进行检测。