Использование tslint для обеспечения неизменности - PullRequest
0 голосов
/ 28 января 2019

Как начинающий разработчик React, я только что узнал, что я непреднамеренно изменял состояние и подпирал напрямую.

Существует множество примеров:

const {variable} = this.props;
variable[index] = value;
// do something local with var - not realizing that variable is changed

Есть сотниэкземпляров в моей кодовой базе этого.

Существует ли правило tslint или способ, которым я могу найти каждый экземпляр, в котором я мутировал реквизит или состояние, которое должно быть доступно только для чтения.

Я знаю, чтотам есть правило tslint по линиям

TS2540: Cannot assign to ‘url’ because it is a constant or a read-only property.

, но я понятия не имею, как его включить.Насколько я понимаю, в React Typescript реквизиты и состояние заключены в Readonly <>, что должно вызывать эту ошибку каждый раз, когда я пытаюсь изменить реквизиты или состояние.

1 Ответ

0 голосов
/ 28 января 2019

Вы можете объявить их как readonly при создании интерфейсов и использовании ReadonlyArray для массивов, для вашего реквизита и состояния, например:

interface ButtonProps {
  readonly onChange: (event: ChangeEvent) => void;
  readonly classes: ReadonlyArray<string>;
}

class Button extends React.Component<ButtonProps> { ... }

Таким образом, вы должны получить чек везде, какПока все члены readonly, и это будет компилятор, который будет выдавать ошибку, а не tslint.

Одна вещь, которую вы можете сделать, это использовать правила из tslint-immutable , чтобы гарантировать, что вы не пропустите readonly на интерфейсах и массивах

...