Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
¿Por qué mecanografiado se queja de que XXX se puede asignar a la restricción de tipo 'T', pero 'T' podría instanciarse con un subtipo diferente de restricción X?

Mi código es este:

 export interface TreeItem { id: string; children: this[]; collapsed?: boolean; } const createTreeItem = <T extends TreeItem>(): T => { return { id: 'root', children: [] } }

Pero me sale un error en el tipo de retorno de createTreeItem que es el siguiente:

TS2322: escriba '{ id: cadena; niños: nunca[]; }' no se puede asignar al tipo 'T'. '{id: cadena; niños: nunca[]; }' es asignable a la restricción de tipo 'T', pero 'T' podría instanciarse con un subtipo diferente de restricción 'TreeItem'.

No tengo absolutamente ninguna idea de qué significa esto.

Alguna ayuda ?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Así que digamos que llamas a tu función de la siguiente manera:

 let node = createTreeItem<TreeItem>()

Todo bien, ¿verdad? El tipo de devolución T es TreeItem , y el objeto que su función genérica está codificada para devolver de hecho tiene un tipo que lo califica como TreeItem :

 { id: string; children: never[]; }

Pero el objetivo de darle a su función un parámetro de tipo es permitir que se llame con otros tipos de T , siempre que extiendan TreeItem . Así que lo siguiente debería ser una llamada legal:

 export interface BidiTreeItem { id: string; children: this[]; parent: this; collapsed?: boolean; } let node = createTreeItem<BidiTreeItem>()

La llamada es legal, ya que BidiTreeItem satisface la restricción T extends TreeItem . El tipo de devolución de esta llamada, como se declara en la definición de su función, es BidiTreeItem , pero lo que devuelve su función NO es un BidiTreeItem .

Si vuelve a leer el mensaje de error pero con el ejemplo anterior en mente, ahora tendrá sentido para usted. Pero por si acaso, a continuación traduciré cada parte del mensaje de error. Tenga en cuenta que la primera oración es la conclusión, por lo que irá en último lugar en esta tabla:

esta parte del mensaje de error... significa esto (usando el ejemplo anterior)...
'{ id: string; children: never[]; }' is assignable to the constraint of type 'T' '{ id: string; children: never[]; }' es consistente con la restricción T extends TreeItem
but 'T' could be instantiated with a different subtype of constraint 'TreeItem'. pero se podría crear una instancia de T con un subtipo diferente de TreeItem , por ejemplo, BidiTreeItem .
TS2322: Type '{ id: string; children: never[]; }' is not assignable to type 'T'. No se garantiza que el objeto que devuelve su función sea asignable al tipo T , porque T podría ser algún otro subtipo como BidiTreeItem .
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede agregar "como T después de la devolución":

const createTreeItem = (): T => ({ id: 'root', children: [] } as T);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda