Запрет индексируемых типов в TypeScript - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь найти правило tslint в tslint.yml, которое исключит любое использование индексируемых типов (например, { [key: string] : string }) вместо использования записей TypeScript (например, Record<string, string>), но безуспешно на данный момент.

Я наткнулся на правило tslint, известное как Ban-Types , которое запрещает типы, соответствующие данному регулярному выражению. Я попробовал следующее

tslint.yml
  ban-types: [
    true,
    [ "{\s*\[\s*(\S+)\s*:\s*(.+)\s*\]\s*:\s*(.+)\s*}",
      "Do not use indexable types (i.e. { [index: A] : B } ). Use Record<A, B> instead." ],
  ]

, но выдает эту ошибку:

unknown escape sequence at line 23, column 10:
        [ "{\s*\[\s*(\S+)\s*:\s*(.+)\s*\]\s*: ... 
             ^ in /path/to/tslint.yml

Я попытался еще раз со следующим регулярным выражением:

tslint.yml
  ban-types: [
    true,
    [ "\\{\\s*\\[\\s*(\\S+)\\s*:\\s*(.+)\\s*\\]\\s*:\\s*(.+)\\s*\\}",
      "Do not use indexable types (i.e. { [index: A] : B } ). Use Record<A, B> instead." ],
  ]

, которые не вызвали никаких исключений, но не смогли обнаружить индексируемые типы.

Реализацию правила можно найти здесь , если это поможет.

1 Ответ

0 голосов
/ 19 апреля 2020

У вас это работает?

    \{\s*\[\s*\w+\s*:\s*\w+\s*\]\s*:\s*\w*\s*\}

regex explanation

...