版本

no-restricted-properties

不允許特定物件上的特定屬性

在程式碼庫中,物件上的某些屬性可能不被允許。這對於棄用 API 或限制模組方法的使用非常有用。例如,您可能想要禁止在使用 Mocha 時使用 describe.only,或告訴人們使用 Object.assign 而不是 _.extend

規則詳細資訊

此規則查找在給定物件名稱上存取給定屬性鍵,無論是讀取屬性值還是將其作為函式調用時。您可以指定一個可選的消息,以指示替代 API 或限制的原因。此規則適用於通過點表示法和解構存取的屬性。

選項

此規則接受物件列表,其中指定了物件名稱和屬性名稱

{
    "rules": {
        "no-restricted-properties": [2, {
            "object": "disallowedObjectName",
            "property": "disallowedPropertyName"
        }]
    }
}

可以不允許多個物件/屬性值,並且您可以指定一個可選的消息

{
    "rules": {
        "no-restricted-properties": [2, {
            "object": "disallowedObjectName",
            "property": "disallowedPropertyName"
        }, {
            "object": "disallowedObjectName",
            "property": "anotherDisallowedPropertyName",
            "message": "Please use allowedObjectName.allowedPropertyName."
        }]
    }
}

如果省略物件名稱,則所有物件都不允許該屬性

{
    "rules": {
        "no-restricted-properties": [2, {
            "property": "__defineGetter__",
            "message": "Please use Object.defineProperty instead."
        }]
    }
}

如果省略屬性名稱,則不允許存取給定物件的任何屬性

{
    "rules": {
        "no-restricted-properties": [2, {
            "object": "require",
            "message": "Please call require() directly."
        }]
    }
}

此規則的錯誤程式碼範例

在 Playground 中開啟
/* eslint no-restricted-properties: [2, {
    "object": "disallowedObjectName",
    "property": "disallowedPropertyName"
}] */

const example = disallowedObjectName.disallowedPropertyName; /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/

disallowedObjectName.disallowedPropertyName(); /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/
在 Playground 中開啟
/* eslint no-restricted-properties: [2, {
    "property": "__defineGetter__"
}] */

foo.__defineGetter__(bar, baz);

const { __defineGetter__ } = qux();

({ __defineGetter__ }) => {};
在 Playground 中開啟
/* eslint no-restricted-properties: [2, {
    "object": "require"
}] */

require.resolve('foo');

此規則的正確程式碼範例

在 Playground 中開啟
/* eslint no-restricted-properties: [2, {
    "object": "disallowedObjectName",
    "property": "disallowedPropertyName"
}] */

const example = disallowedObjectName.somePropertyName;

allowedObjectName.disallowedPropertyName();
在 Playground 中開啟
/* eslint no-restricted-properties: [2, {
    "object": "require"
}] */

require('foo');

何時不該使用

如果您沒有任何要限制的物件/屬性組合,則不應使用此規則。

版本

此規則在 ESLint v3.5.0 中引入。

資源

變更語言