Búsqueda de sitios web

typescript - Crear un archivo d.ts para un módulo existente


Estoy intentando crear un archivo d.ts para la biblioteca React StaticContainer.

La librería instalada en NPM se ve así:

var React = require('react');

var StaticContainer = (function (_React$Component) {

  function StaticContainer() {
    // ...
  }

  // ...

  return StaticContainer;
})(React.Component);

module.exports = StaticContainer;

Un ejemplo de uso es así:

var StaticContainer = require('react-static-container');

Y no estoy seguro de cómo crear una declaración para esto y usarla en TypeScript. Hasta ahora, de mi investigación he llegado a esto:

import * as StaticContainer from 'react-static-container'

Y este archivo d.ts:

interface StaticContainer extends React.Component<any, any> {
  shouldUpdate?:boolean;
}

declare module "react-static-container" {
  export = StaticContainer;
}

Sin embargo, TSC me da este error:

Error:(3, 34) TS2497: El módulo '"react-static-container"' se resuelve como una entidad no modular y no puede ser importado usando esta construcción.

Estoy bastante confundido sobre cómo el module.exports=StaticContainer debería traducirse a un archivo d.ts. ¿Cómo se hace esto?

Respuesta #1

El módulo '"react-static-container"' se resuelve en una entidad que no es un módulo y no se puede importar usando esta construcción.

Exactamente lo que dice el error. Necesitas importar bibliotecas de estilo export = con import require. Esto se debe a la especificación de ES6.

import StaticContainer =  require('react-state-container');