es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Fusionar el código JavaScript con su definición en TypeScript provenientes de diferentes archivos.

Quiero usar un archivo específico de un repositorio sin instalar su paquete NPM, pero está codificado en JavaScript y tiene un archivo de definición separado.

Quiero fusionar la implementación de JavaScript con la definición de tipo, por lo que terminé usando este enfoque:

import { default as HeadersImplementation } from '../node-fetch/src/headers.js';
import { Headers as HeadersDefinition, HeadersInit } from '../node-fetch/@types/index';

const Headers: {
  prototype: HeadersImplementation;
  new(init?: HeadersInit): HeadersDefinition;
} = HeadersImplementation;

const teste = new Headers();
teste.append('Hello', 'World!');

¿Existe una manera fácil de fusionar la implementación de la clase con su definición?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, una forma de fusionar la implementación de la clase con su definición es usar una fusión de declaraciones. Puedes definir una interfaz para la clase con el mismo nombre que la clase, y luego fusionarla con la definición original de la clase. Aquí tienes un ejemplo de cómo hacerlo:

    import { Headers as HeadersDefinition, HeadersInit } from '../node-fetch/@types/index';
    import { Headers as HeadersImplementation } from '../node-fetch/src/headers.js';
    
    interface Headers extends HeadersImplementation {}
    
    class Headers {
      constructor(init?: HeadersInit) {
        HeadersImplementation.apply(this, [init]);
      }
    }
    
    const teste = new Headers();
    teste.append('Hello', 'World!');
    

    En este ejemplo, definimos una interfaz llamada Headers que extiende la clase HeadersImplementation, fusionando efectivamente la implementación de la clase con la definición de tipo. Luego definimos una nueva clase Headers que extiende esta interfaz y usa el constructor HeadersImplementation. A partir de aquí, podemos usar la clase Headers como si hubiera sido escrita originalmente en TypeScript.

Comments are closed.