首页 > 解决方案 > 对javascript对象数组进行排序,打字稿错误

问题描述

我有两个问题,一个是围绕我在 angular-cli transpiles 时注意到的几次行为......第二个是排序数组问题,它触发了 #1 问题。

我试图排序的数组看起来像这样 - 称之为事物数组:

[{
    label : string,
    primary: boolean
}]

基本上是一个带有“主要”字段的标签,该字段本质上是布尔值,因此值为真、假或空。我想排序,所以布尔值 TRUE 排在第一位,布尔值 FALSE 排在后面,NULL 排在最后。每个分组中的标签按字母顺序排列。

我只是想做一个简单的 JS 数组排序——不需要 TS——

this.user.things.sort( function(a, b){ return b.primary > a.primary} );

所以我的编辑器警告我 TS 错误......我忽略了,因为代码有效。

[ts] '(a: ThingModel, b: ThingModel) => boolean' 类型的参数不可分配给'(a: ThingModel, b: ThingModel) => number' 类型的参数。类型 'boolean' 不能分配给类型 'number'。

我想我将从问题 2 开始。因为同样的错误出现在编译时

即使这是普通的 JS - 我不喜欢看到波浪线和转译中的红色错误。

问题 2:我怎样才能使这个 TS 兼容?

然后,当我编译时 - 即使我收到错误 - 几秒钟后 - 我收到“编译成功”消息 - 并且网站运行正常。

问题 1:有人可以向我解释 - 或指向我的文档 - 关于转译器以及哪些错误被认为是致命的 - 无启动错误,以及哪些错误会像这个错误一样,它在哪里抛出一个红色错误 - 但完成编译无论如何,代码有效。???这更像是一个教育问题,而不是解决一个错误。但我想了解它。

谢谢。

标签: javascripttypescriptangular-cli

解决方案


您需要返回number不是boolean

  this.user.things.sort(function (a, b) {
            return a.primary < b.primary ? 1 : a.primary > b.primary ? -1 : 0;
        });

现在它不会抛出任何警告或错误。


推荐阅读