Tslint: распространение объекта не должно быть предпочтительным, если первый аргумент Object.assign является экземпляром класса

Созданный на 25 мая 2017  ·  3Комментарии  ·  Источник: palantir/tslint

Сообщение об ошибке

  • __TSLint версия__: 5.3

Линтинг кода TypeScript

value = Object.assign(new Model(), value)

с включенным prefer-object-spread

Фактическое поведение

сбой lint, автоматическое исправление для использования распространения объекта

Ожидаемое поведение

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

  • если указан --project , мы можем проверить, является ли тип первого аргумента классовым
  • если проект не предоставлен и мы выполняем только синтаксические проверки, лучшее, что мы можем сделать, это проверить new ... и проигнорировать выражение

как указано в https://github.com/palantir/tslint/issues/2618#issuecomment -303879255

Fixed Bug

Самый полезный комментарий

Если первый аргумент не является литералом объекта, правило вызывает ошибку, только если результат присваивается чему-то.
Назначение возвращаемого значения Object.assign имеет смысл только в том случае, если первым аргументом является CallExpression, NewExpression или аналогичный. Все остальное, например идентификатор или PropertyAccessExpression, все равно должно быть ошибкой.
И это не требует проверки типов.

Все 3 Комментарий

Object.assign имеет побочные эффекты для своего первого аргумента. (Вот почему TypeScript преобразует { ...x, ...y } в Object.assign({}, x, y) .) Правило должно активироваться, только если первый аргумент является новым литералом объекта.

Правило должно активироваться только в том случае, если первый аргумент - это новый литерал объекта.

Что ж, технически ты прав. Но я часто вижу ошибки, когда программисты не заботятся о побочных эффектах первого аргумента и в любом случае предоставляют нелитальное значение, когда они _ фактически_ намеревались сделать то же самое, что и распространение объекта. Так что я все еще хочу, чтобы это правило улавливало это. Может быть, это могло быть согласие ...

Если первый аргумент не является литералом объекта, правило вызывает ошибку, только если результат присваивается чему-то.
Назначение возвращаемого значения Object.assign имеет смысл только в том случае, если первым аргументом является CallExpression, NewExpression или аналогичный. Все остальное, например идентификатор или PropertyAccessExpression, все равно должно быть ошибкой.
И это не требует проверки типов.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги