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
相关产品推荐
相关产品推荐

