Búsqueda de sitios web

typescript - ¿Qué significa "El tipo A no tiene propiedades en común con el tipo B"?


Después de actualizar TypeScript de la versión 2.3 a la 2.6, veo este error en varios de mis tipos. ¿Qué significa realmente? ¿Puedes darme un ejemplo?

EDITAR: Entiendo que este mensaje indica una extensión/implementación de interfaz errónea. Me interesa más el significado de sin propiedades en común. La pregunta sugerida muestra un ejemplo de una clase que implementa una interfaz. Lo que he visto es una interfaz que extiende otra interfaz y cambia el tipo de una de las propiedades. ¿Qué tiene que ver con el mensaje?

Respuesta #1

TypeScript 2.4 introdujo una verificación más estricta de los tipos débiles, por ejemplo, una interfaz donde todas las propiedades son opcionales.

Supongamos que tenemos dos tipos débiles con propiedades diferentes:

interface A {
    a?: string;
}

interface B {
    b?: string;
}

let x: A = {};
let y: B = {};

Observa que tanto x como y son objetos vacíos que satisfacen sus respectivos tipos débiles A y B.

Ahora, ¿es un error asignar una A a una B?

y = x;

TypeScript 2.4+ dice sí, esto es un error:

Type 'A' has no properties in common with type 'B'.

Este es un ejemplo simplificado; tu archivo de tipificaciones ciertamente es más complejo, pero espero que esto ilustre la intención del error. Si publicas algo de código, podemos profundizar más en ello.

Si la verificación de tipos débil de TypeScript está siendo demasiado cautelosa en tu caso, existen soluciones alternativas como la conversión de tipos o el uso de una firma de índice:

https://blog.mariusschulz.com/2017/12/01/typescript-2-4-detección-de-tipo-débil

Artículos relacionados