Saltar al contenido

error TS2345: el argumento de tipo ‘T’ no se puede asignar al parámetro de tipo ‘objeto’

El paso a paso o código que hallarás en este post es la solución más eficiente y efectiva que encontramos a esta duda o problema.

Solución:

Cambie la firma de la función, de modo que el tipo genérico T extiende el tipo object, introducido en Typescript 2.2. Utilice esta sintaxis – :

function create(prototype: T, pojo: Object): T 
    ...
    return Object.create(prototype, descriptors) as T;

la firma para Object.create se cambió en TypeScript 2.2.

Antes de TypeScript 2.2, la definición de tipo para Object.create estaba:

create(o: any, properties: PropertyDescriptorMap): any;

Pero como usted señala, TypeScript 2.2 introdujo el object escribe:

TypeScript no tenía un tipo que representara el tipo no primitivo, es decir, cualquier cosa que no sea number | string | boolean | symbol | null | undefined. Introduzca el nuevo tipo de objeto.

Con el tipo de objeto, las API como Object.create se pueden representar mejor.

La definición de tipo para Object.create fue cambiado a:

create(o: object, properties: PropertyDescriptorMap): any;

Así que el tipo genérico T en su ejemplo no es asignable a object a menos que se le diga al compilador que T extiende object.

Antes de la versión 2.2, el compilador no detectaría un error como este:

Object.create(1, );

Ahora el compilador se quejará:

El argumento de tipo ‘1’ no se puede asignar al parámetro de tipo ‘objeto’.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *