Tslint: la extensión del objeto no debe ser preferida cuando el primer argumento de Object.assign es una instancia de clase

Creado en 25 may. 2017  ·  3Comentarios  ·  Fuente: palantir/tslint

Informe de error

  • __TSLint versión__: 5.3

El código de TypeScript está ligado

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

con prefer-object-spread habilitado

Comportamiento real

falla de pelusa, autocorrección para usar la propagación del objeto

Comportamiento esperado

nada. esta regla debería ignorar los casos en los que el primer argumento de Object.assign es una instancia de clase.

  • si se proporciona --project , podemos verificar si el tipo del primer argumento es de clase
  • si no se proporciona ningún proyecto y solo estamos haciendo verificaciones sintácticas, lo mejor que podemos hacer es verificar new ... e ignorar la expresión

como se informa en https://github.com/palantir/tslint/issues/2618#issuecomment -303879255

Fixed Bug

Comentario más útil

Si el primer argumento no es un objeto literal, la regla solo produce un error si el resultado se asigna a algo.
Asignar el valor de retorno de Object.assign solo tiene sentido si el primer argumento es CallExpression, NewExpression o similar. Todo lo demás, por ejemplo, un identificador o PropertyAccessExpression, debería ser un error.
Y eso no requiere el verificador de tipos.

Todos 3 comentarios

Object.assign tiene efectos secundarios en su primer argumento. (Es por eso que TypeScript transpila { ...x, ...y } a Object.assign({}, x, y) .) La regla solo debe activarse si el primer argumento es un nuevo literal de objeto.

La regla solo debe activarse si el primer argumento es un nuevo literal de objeto.

Bueno, técnicamente, tienes razón. Pero a menudo veo errores en los que los programadores no tienen cuidado con los efectos secundarios en el primer argumento y proporcionan un valor no literal de todos modos cuando, en realidad, tenían la intención de hacer lo mismo que la propagación del objeto. Así que todavía querría que esta regla captara eso. Tal vez podría ser opt-in ...

Si el primer argumento no es un objeto literal, la regla solo produce un error si el resultado se asigna a algo.
Asignar el valor de retorno de Object.assign solo tiene sentido si el primer argumento es CallExpression, NewExpression o similar. Todo lo demás, por ejemplo, un identificador o PropertyAccessExpression, debería ser un error.
Y eso no requiere el verificador de tipos.

¿Fue útil esta página
0 / 5 - 0 calificaciones