下划线表达式的类型

时间:2015-12-11 18:50:42

标签: typescript underscore.js

为什么这个表达

_.chain(this.entityTypeConnections)
 .filter(function (con:app.domain.EntityTypeConnection) { return con.typeId == typeId; })
 .size()
 .value()

类型为EntityTypeConnection[],但不是数字?

我需要将此表达式与零(> 0)进行比较并得到错误:

  

错误TS2365:运营商'>'不能应用于类型' EntityTypeConnection []'和'号码'

我正在尝试检查集合中是否有某个元素typeId

1 个答案:

答案 0 :(得分:1)

所以基本上我假设您不能在类型化的上下文中使用size()。检查下划线的.d.ts文件显示其返回类型为_Chain<T>,在您的情况下为_Chain<EntityTypeConnection[] - 显然这是错误的(在普通的javascript中运行它,你会得到你的号码)

替代

获取值(“unchain”)并在数组上调用.length

let size = _.chain(this.entityTypeConnections)
    .filter(function (con:app.domain.EntityTypeConnection) { return con.typeId == typeId; })
    .value()
    .length;

如果您想检查具有给定typeId的项目是否存在,您也可以使用:

let hasItem = !!_.findWhere(this.entityTypeConnections, {
    typeId: typeId
});