假设我有一个实现IItem
接口的对象数组:
interface IItem {
getId() : string;
}
interface ISortableItem extends IItem {
getSortIndex() : number;
}
var items : IItem[] = [ ... ];
现在我只想获得实现ISortableItem
界面的项目,但我不认为这些信息在运行时可用。我可以使用这样的东西:
for (var i of items) {
if ((<ISortableItem>i).getSortIndex) {
...
}
}
虽然它有效但我的程序员心脏开始流血;-)有没有更优雅的方法来解决这个问题?
答案 0 :(得分:0)
我建议在你的情况下使用课程。
class Item {
getId() { .. }
}
class SortableItem extends Item {
getSortIndex() { ... }
}
...
items.filter( item => item instanceof SortableItem )
通过执行此操作,您将允许在运行时和编译时进行检测。