Saltar al contenido

Referencias de tipo circular en TypeScript

La guía o código que verás en este artículo es la solución más sencilla y efectiva que encontramos a esta inquietud o problema.

Solución:

Dos soluciones a continuación. Prefiero este último ya que ofrece una interfaz limpia con los módulos de Node JS, pero desafortunadamente a mi IDE (todavía) no le gusta tanto como a mí…

Usar referencias

Crear un definitions.d.ts archivo que solo contendrá las referencias a sus clases/interfaces

/// 
/// 

En Parent.ts y Child.tsapuntan a una sola referencia, el definitions.d.ts expediente

/// 

Usar importar… requerir

pasa el --module commonjs bandera a tsc entonces import lo que tu require y export lo que quieres exponer

En Parent.ts

 import Child = require('Child')

 interface Parent  
     children: Child[]
 

 export = Parent

En Niño.ts

 import Parent = require('Parent')
 
 interface Child 
     parent: Parent
 

 export = Child

Tenga en cuenta que no especifica la extensión ‘.ts’ en require

Tengo alrededor de 10 archivos ts, en un Circular-Dependency-Hell.

Los métodos comunes ya no me pueden ayudar, porque la relación de dependencia entre 10 archivos es demasiado compleja.

Al final, lo resolví. Usando los siguientes 2 métodos:

  1. Instalar repositorio ———— “circular-dependency-plugin”: “5.0.2”

    Este repositorio me ayudará a encontrar el lugar donde ocurre la circular.

  2. Usando un internal.ts diseñado, para administrar mi importación y exportación

    Probé el método de este artículo:

    Cómo solucionar problemas desagradables de dependencia circular de una vez por todas en JavaScript y TypeScript

    Este increíble artículo me dice que cree internal.ts.

    y usando como export * form 'file-A' ; export * from 'file-B' para administrar mis dependencias circulares.

    Funciona muy bien cuando uso dependencias relacionadas con mis 10 archivos, como este import classA from '../internal.ts'.

————————————————————————————————————

Si el método anterior no te afecta, encontré otra solución general:

Usar

const File_Promise = import ('yourFilePath')" para importar otro archivo o módulo.

cuando necesite usar este, use

File_Promise.then (file => file.xxx(file.yyy) )

, al igual que usar la sintaxis de Promise. `

¡Esto romperá la Cadena Circular-Dep!

Si soy tú, continuaré esta acción hasta que NO HAY ERROR Reportado por “circular-dependency-plugin”.

————————————————————————————————————

¡Espero ayudarte!

Yo también me enfrenté a una situación similar.

Podría resolver usando import type.

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html

Comentarios y valoraciones

Puedes sustentar nuestro análisis fijando un comentario y dejando una puntuación te lo agradecemos.

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


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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