Declaración de tipos de uso en otro paquete

He establecido un registro privado de NPM que alberga un tenedor de un paquete disponible públicamente (que está permitido por la licencia del paquete).

El paquete fuente tiene una declaración de tipo proporcionada por el maravilloso proyecto DefinitelyTyped.

Actualmente, en mi proyecto, si escribo:

import mypackage from '@private/mypackage'

Los tipos proporcionados por DefinitalyTyped@types/mypackage) no se aplicará, y conseguiré el error:

error TS7016: No se puede encontrar un archivo de declaración para el módulo '@privado/mipackage'. 'node_modules/@priv/mypackage/index.js' implícitamente tiene un tipo 'cualquier'.

En mi proyecto, ¿es posible redeclarar los tipos de paquetes fuente para el tenedor, para que el ejemplo anterior funcione?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por debugdynamo46a0


3 Respuestas:

  • Puede agregar un archivo de declaración (.d.ts) para el módulo:

    declare module '@private/mypackage'
    {
        import m from 'mypackage';
    
        export default m;
    }
    

    Respondida el Dec 18, 2020 a las 12:27 - por logiclinguist

    Votos positivos: 0 | Votos negativos: 0

  • Para solucionar este problema, puedes crear un archivo index.d.ts en el directorio de tu paquete tenedor (@private/mypackage) e incluir en él las declaraciones de tipo que quieres que se apliquen para ese paquete.

    Asegúrate de que las declaraciones de tipo en index.d.ts coincidan con las definiciones de tipos proporcionadas por DefinitelyTyped para el paquete original.

    Luego, en tu proyecto, donde importas @private/mypackage, TypeScript utilizará las declaraciones de tipo del archivo index.d.ts que has creado en lugar de inferir el tipo como any.

    De esta manera, puedes redeclarar los tipos de paquetes fuente para el tenedor y hacer que las definiciones de tipo se apliquen correctamente en tu proyecto.

    Respondida el Dec 19, 2020 a las 12:28 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible redeclarar los tipos de paquetes fuente para el tenedor y hacer que el ejemplo funcione. Aquí tienes los pasos:

    • Crea un archivo de declaración de tipos: Crea un archivo `.d.ts` en tu proyecto con el mismo nombre que el paquete fuente. Por ejemplo, si el paquete fuente se llama `mypackage`, crea un archivo llamado `mypackage.d.ts`.
    • Importa las declaraciones de tipos originales: En el archivo `.d.ts`, importa las declaraciones de tipos originales de DefinitelyTyped. Puedes hacerlo usando la sintaxis `/// `, por ejemplo:
    typescript
    /// 
    
    • Declara los tipos del tenedor: Debajo de la declaración de importación, puedes redeclarar los tipos del tenedor. Esto puede implicar agregar tipos adicionales, modificar tipos existentes o eliminar tipos que no sean necesarios.
    • Exporta las declaraciones: Exporta las declaraciones de tipos redefinidas para que estén disponibles para tu proyecto. Puedes hacerlo usando la sintaxis `export {}`, por ejemplo:
    typescript
    export {};
    
    • Usa el archivo de declaración de tipos: En tu código, sigue importando el paquete fuente como antes, pero incluye también el archivo de declaración de tipos recién creado. Por ejemplo:
    typescript
    import mypackage from '@private/mypackage';
    import './mypackage.d.ts'; // Archivo de declaración de tipos personalizados
    

    Siguiendo estos pasos, deberías poder redeclarar los tipos del paquete fuente para el tenedor y hacer que el ejemplo funcione con los tipos correctos aplicados.

    Respondida el Dec 19, 2020 a las 12:38 - por Gemini

    Votos positivos: 0 | Votos negativos: 0