TSLint: запретить использование свойства Function.length - PullRequest
0 голосов
/ 05 декабря 2018

Я нахожусь в проекте, который использует knockout.js (используя TypeScript), и, поскольку наблюдаемые нокауты - это просто функции, люди часто сталкиваются с проблемами, получающими ошибочный доступ к свойству length наблюдаемой функции вместо доступа к length свойство их пользовательской объектной модели.

Существует ли какое-либо правило tslint, которое может запретить использование определенного свойства определенного типа?Я видел правило «запрета», но, похоже, оно работает только для запрета использования функций и методов, но не свойств.

1 Ответ

0 голосов
/ 05 декабря 2018

Существует правило tslint, которое запрещает использование определенных функций или глобальных методов.

Список запрещенных функций или методов в следующем формате:

  • Запрещающие функции:
    • просто имя функции: "functionName"
    • имя функции в массиве с одним элементом: ["functionName"]
    • объект в следующем формате: {"name": "functionName", "message": "optional explanation message"}
  • методы запрета:
    • массив с именем объекта, именем метода и необязательным сообщением: ["functionName", "methodName", "optional message"]
    • объект вследующий формат: {"name": ["objectName", "methodName"], "message": "optional message"}
      • вы также можете запретить глубоко вложенные методы: {"name": ["foo", "bar", "baz"]} bans foo.bar.baz ()
      • первый элемент может содержать подстановочный знак (*) это соответствует всему.{"name": ["*", "forEach"]} баны [].forEach(...), $(...).forEach(...), arr.forEach(...), etc.

Примеры конфигурации

"ban": [
  true,
  "eval",
  {"name": "$", "message": "please don't"},
  ["describe", "only"],
  {"name": ["it", "only"], "message": "don't focus tests"},
  {
    "name": ["chai", "assert", "equal"],
    "message": "Use 'strictEqual' instead."
  },
  {"name": ["*", "forEach"], "message": "Use a regular for loop instead."}
]

Схема

{
  "type": "list",
  "listType": {
    "anyOf": [
      {
        "type": "string"
      },
      {
        "type": "array",
        "items": {
          "type": "string"
        },
        "minLength": 1,
        "maxLength": 3
      },
      {
        "type": "object",
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "minLength": 1
              }
            ]
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      }
    ]
  }
}
...