Создание файла d.ts для существующего модуля

Я пытаюсь создать файл d.ts для библиотеки React StaticContainer.

Установленная библиотека в NPM выглядит так:

var React = require('react');

var StaticContainer = (function (_React$Component) {

  function StaticContainer() {
    // ...
  }

  // ...

  return StaticContainer;
})(React.Component);

module.exports = StaticContainer;

Пример использования такой:

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

И я не уверен, как создать объявление для этого и использовать его в TypeScript. Пока из моих исследований я пришел к следующему:

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

И этот d.ts файл:

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

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

Однако TSC выдает мне эту ошибку:

Ошибка: (3, 34) TS2497: модуль «реакция-статический-контейнер» разрешается в объект, не являющийся модулем, и его нельзя импортировать с помощью этой конструкции.

Я немного запутался, как module.exports = StaticContainer должен переводиться в файл d.ts. Как это делается?


person Aaron Beall    schedule 20.11.2015    source источник


Ответы (1)


Модуль '"react-static-container"' разрешается в объект, не являющийся модулем, и его нельзя импортировать с помощью этой конструкции.

Именно то, что говорит ошибка. Вам нужно импортировать export = библиотеки стилей с помощью import require. Это из-за спецификации ES6.

import StaticContainer =  require('react-state-container');
person basarat    schedule 20.11.2015
comment
Я уверен, что это означает то, что говорит большинство сообщений об ошибках;), но у меня нет контекста, чтобы понять это... это из-за спецификации ES6, к сожалению, не способствует моему пониманию. Можете ли вы уточнить? Код, который вы разместили, не работает, теперь я получаю TS2304: Cannot find name 'StaticContainer'. Я предполагаю, что мой d.ts неправильно отражает способ экспорта исходной библиотеки. - person Aaron Beall; 20.11.2015
comment
У @Aaron точно такая же проблема. должен был определить то же имя до того, как var. Например, let StaticContainer : any в данном случае. Не уверен, почему это происходит. - person Guria; 15.02.2016
comment
Спецификация ES6 позволяет экспортировать отдельные элементы. Экспорт объекта не поддается статическому анализу и не поддерживается. - person basarat; 20.07.2016