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

1.3K
Vistas
Archivos de declaración personalizados de TypeScript para módulos npm sin tipo

Estoy consumiendo un componente React llamado shiitake de npm en mi proyecto donde uso TypeScript. Esa biblioteca no tiene declaraciones de TypeScript, así que pensé en escribir una. El archivo de declaración se ve a continuación (puede que no esté completo, pero no se preocupe demasiado):

 import * as React from 'react'; declare module 'shiitake' { export interface ShiitakeProps { lines: number; } export default class Shiitake extends React.Component<ShiitakeProps, any> { } }

He puesto esto dentro del archivo ./typings/shiitake.d.ts y en VS Code, veo el siguiente error:

[ts] Nombre de módulo no válido en el aumento. El módulo 'shiitake' se resuelve en un módulo sin tipo en 'd:/dev/foo/foobar.foo.Client.Web/node_modules/shiitake/dist/index.js', que no se puede aumentar.

En el lado del consumo, sigo recibiendo el mismo error incluso con la declaración anterior (ya que no tengo activado el interruptor del compilador noImplicitAny ):

 /// <reference path="../../../../typings/shiitake.d.ts" /> import * as React from 'react'; import Shiitake from 'shiitake';

[ts] No se pudo encontrar un archivo de declaración para el módulo 'shiitake'. 'd:/dev/foo/foobar.foo.Client.Web/node_modules/shiitake/dist/index.js' implícitamente tiene un tipo 'cualquiera'.

El por qué estándar de adquirir archivos de declaración para este tipo de módulos es a través de @types/ way y funciona bien. Sin embargo, no puedo hacer que funcionen los tipos personalizados. ¿Alguna idea?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La declaración declare module 'shiitake'; debe tener un alcance global. es decir, una declaración de nivel superior en un no módulo (donde un módulo es un archivo con al menos una import o export de nivel superior).

Una declaración de la forma declare module '...' { } en un módulo es un aumento. Para obtener más detalles, consulte Aumento del módulo de mecanografiado .

Así que quieres que este archivo se vea así:

 declare module 'shiitake' { import * as React from 'react'; export interface ShiitakeProps { lines: number; } export default class Shiitake extends React.Component<ShiitakeProps, any> { } }
over 4 years ago · Santiago Trujillo Denunciar

0

En mi experiencia, un archivo de definición fallará de esta manera si tiene exportaciones o importaciones declaradas fuera de la definición del módulo. Si usa un IDE con importación automática, ¡tenga cuidado!

over 4 years ago · Santiago Trujillo Denunciar

0

Tuve el mismo problema hoy.

Resulta que pego las interfaces exportadas fuera de la declaración del módulo. El archivo de escritura que usé como plantilla tenía interfaces privadas al final del archivo.

Entonces, mis interfaces exportadas se declararon fuera de la declaración del módulo. Esto es lo que vuelve loco al compilador de TypeScript.

Una vez que moví las interfaces a los límites del módulo, todo se arregló.

over 4 years ago · Santiago Trujillo 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