Описание d.ts файлов и импорт js модулей, которые используют module.exports =

Вы пишете приложение на ts, хотите использовать nodejs модуль (предположим https://github.com/rexxars/react-markdown), который в своем теле имеет такую форму записи:

// module body
module.exports = ReactMarkdown;

Вам не повезло, и готовый тайпингов для модуля нет, вам придется написать свои. Форма записи module.exports = нарушает принципы работы es6 модулей (а ts модули совместимые с es6), и es6 модуль не может экспортировать значение как результат модуля (только свойство объекта или значения экспорта по умолчанию).

Чтобы ваш код запузырился нужно в d.ts файле описать экспорт как export =:

declare module 'react-markdown' {
 import {Component} from 'react'
 interface IProps {
  source: string
  className?: string
  containerTagName?: string
 }
 interface IState {

 }
 export = class ReactMarkdown extends Component<IProps, IState> {}
}

А в потребителе использовать require для импорта модуля:

import ReactMarkdown = require('react-markdown')

UPD документация по ts модулям: https://www.typescriptlang.org/docs/handbook/modules.html

2 лайка