如何为ESLint规则指定含对象数组的Schema?
自定义ESLint规则的Schema配置问题
我正尝试为自定义ESLint规则配置Schema,预期配置格式如下:
'my-rule': ['error', [ {'any-key': ['array', 'of', 'strings']}, {'some-other-key': ['array', 'of', 'strings']}, // ... 更多类似对象 ]]
我需要允许任意非枚举属性名,但不确定如何指定这些属性的值类型。当前我的Schema代码如下:
schema: [ { type: 'array', items: { type: 'object', propertyNames: { type: 'string', // ???—— 这里该怎么指定值为字符串数组? }, } } ],
请问这个配置是否可行?
解答
当前的配置不可行,因为propertyNames仅用于约束对象属性名的格式(比如这里指定属性名必须是字符串),但它无法定义属性值的类型。要实现“任意属性名,但属性值必须是字符串数组”的约束,你需要使用additionalProperties字段来定义任意属性的值规则。
修正后的Schema代码如下:
schema: [ { type: 'array', items: { type: 'object', // 允许任意字符串类型的属性名 propertyNames: { type: 'string' }, // 定义所有属性的值必须是字符串数组 additionalProperties: { type: 'array', items: { type: 'string' } } } } ],
说明
- 外层的数组结构符合ESLint规则Schema的要求:对应规则配置中
['error', ...]里的第二个参数(即规则的自定义配置项)。 propertyNames确保对象的属性名都是字符串,满足你“任意非枚举属性名”的需求。additionalProperties明确规定了每个属性的值必须是由字符串组成的数组,完全匹配你预期的配置格式。
内容的提问来源于stack exchange,提问作者user776686
相关产品推荐
相关产品推荐

