版本

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."
        }]
    }
}

此規則的不正確程式碼範例

在線上編輯器中開啟
/* eslint no-restricted-properties: [2, {
    "object": "disallowedObjectName",
    "property": "disallowedPropertyName"
}] */

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

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

foo.__defineGetter__(bar, baz);

const { __defineGetter__ } = qux();

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

require.resolve('foo');

此規則的正確程式碼範例

在線上編輯器中開啟
/* eslint no-restricted-properties: [2, {
    "object": "disallowedObjectName",
    "property": "disallowedPropertyName"
}] */

var example = disallowedObjectName.somePropertyName;

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

require('foo');

何時不該使用此規則

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

版本

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

資源

變更語言