You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TS项目编译报错key'UnitOfMeasure'未按字母顺序排序,如何解决?

问题根因

你的项目开启了ESLint的sort-keys校验规则,要求对象的所有属性必须按字母顺序排列,你多次调整位置仍报错的核心是忽略了以下2个规则细节:

  • 默认情况下sort-keys是区分大小写的,大写字母的ASCII码优先级高于所有小写字母,你写的UnitOfMeasure以大写U开头,排序优先级远高于editing、expenseTypes等小写开头的属性,不是放在showUOM后面就符合要求
  • 如果你给state定义了对应的TS接口,若接口内的属性顺序也不符合排序规则,同样会触发该报错,很多人只会调整对象实例的属性顺序,忘了同步调整接口定义的顺序

修复方案

方案1:按规则调整属性顺序

如果你的ESLint用默认的区分大小写配置,把UnitOfMeasure放到所有小写开头属性的最前面即可:

public state = {
    UnitOfMeasure: this.UnitOfMeasure,
    editing: false,
    expenseTypes: [] as IEBPExpenseType[],
    formattedExpenseTypeData: undefined as unknown as IList,
    formattedProductsData: this.productList,
    modal: false,
    products: this.products,
    regionData: this.productList,
    regions: [] as IRegion[],
    rowIndex: 0,
    // selectedUnitOfMeasure: [] as boolean[],
    showDefault: false,
    showExpense: false,
    showRegion: true,
    showUOM: true,
};

如果配置了caseInsensitive: true不区分大小写排序,检查是否有其他u开头的属性,按完整字符串逐字符比较排序即可。

方案2:单行禁用校验(不推荐)

如果不想调整排序,可以在该行上方加注释跳过校验:

// eslint-disable-next-line sort-keys
UnitOfMeasure: this.UnitOfMeasure,

方案3:全局关闭规则

如果团队不需要对象属性排序校验,可在项目的ESLint配置文件中关闭对应规则:

{
  "rules": {
    "sort-keys": "off",
    "@typescript-eslint/sort-keys": "off"
  }
}

内容的提问来源于stack exchange,提问作者Matthew Lemke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:54:05