Tslint: Die Objektverteilung sollte nicht bevorzugt werden, wenn das erste Argument von Object.assign eine Klasseninstanz ist

Erstellt am 25. Mai 2017  ·  3Kommentare  ·  Quelle: palantir/tslint

Fehlerbericht

  • __TSLint-Version__: 5.3

TypeScript-Code wird linted

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

mit prefer-object-spread aktiviert

Tatsächliches Verhalten

Fusselfehler, Auto-Fix, um Objektverbreitung zu verwenden

Erwartetes Verhalten

nichts. Diese Regel sollte Fälle ignorieren, in denen das erste Argument von Object.assign eine Klasseninstanz ist.

  • Wenn --project wird, können wir prüfen, ob der Typ des ersten Arguments klassenähnlich ist
  • Wenn kein Projekt bereitgestellt wird und wir nur syntaktische Prüfungen durchführen, können wir am besten nach new ... suchen und den Ausdruck ignorieren

wie berichtet in https://github.com/palantir/tslint/issues/2618#issuecomment -303879255

Fixed Bug

Hilfreichster Kommentar

Wenn das erste Argument kein Objektliteral ist, erzeugt die Regel nur dann einen Fehler, wenn dem Ergebnis etwas zugewiesen wird.
Die Zuweisung des Rückgabewerts von Object.assign ist nur sinnvoll, wenn das erste Argument ein CallExpression, NewExpression oder ähnliches ist. Alles andere, zB ein Identifier oder PropertyAccessExpression, sollte immer noch ein Fehler sein.
Und dafür ist die Typprüfung nicht erforderlich.

Alle 3 Kommentare

Object.assign hat Nebenwirkungen auf das erste Argument. (Deshalb transpiliert TypeScript { ...x, ...y } in Object.assign({}, x, y) .) Die Regel sollte nur aktiviert werden, wenn das erste Argument ein neues Objektliteral ist.

Die Regel sollte nur aktiviert werden, wenn das erste Argument ein neues Objektliteral ist.

Technisch gesehen hast du recht. Aber ich sehe oft Fehler, bei denen Programmierer nicht auf die Nebenwirkungen des ersten Arguments achten und sie sowieso einen nicht wörtlichen Wert angeben, wenn sie _eigentlich_ dasselbe tun wollten wie die Objektverbreitung. Also würde ich immer noch wollen, dass diese Regel das abfängt. Vielleicht könnte es ein Opt-in sein...

Wenn das erste Argument kein Objektliteral ist, erzeugt die Regel nur dann einen Fehler, wenn dem Ergebnis etwas zugewiesen wird.
Die Zuweisung des Rückgabewerts von Object.assign ist nur sinnvoll, wenn das erste Argument ein CallExpression, NewExpression oder ähnliches ist. Alles andere, zB ein Identifier oder PropertyAccessExpression, sollte immer noch ein Fehler sein.
Und dafür ist die Typprüfung nicht erforderlich.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen