Подтвердить что ты не робот

Создание файлов декларации typescript из javascript

Скажем, например, у вас есть библиотека npm, в моем случае mongoose, как вы собираетесь генерировать d.ts файлы?

4b9b3361

Ответ 1

JavaScript не всегда содержит достаточно информации о типе для компилятора TypeScript для вывода структур в вашем коде, поэтому автоматическое создание определения на основе JavaScript редко является вариантом.

Ниже приведены инструкции о том, как писать их с нуля:

https://www.stevefenton.co.uk/2013/01/complex-typescript-definitions-made-easy/

Но есть один трюк, который может работать (он работает только в ограниченном наборе случаев).

Если вы вставляете JavaScript в новый файл TypeScript, исправьте любые тривиальные ошибки, которые вы можете получить и скомпилируете с помощью флага определения, он может предоставить вам файл, который по крайней мере будет отправной точкой.

tsc --declaration js.ts

Ответ 2

Вопрос немного стар, но ради людей, пришедших из таких поисковых систем, как я, если вы ищете автоматизированный инструмент, проверьте:

  • Microsoft/dts-gen

    Официальная отправная точка, которую Microsoft использует при создании типов. Это означало быть отправной точкой только, хотя и я не получал много удачи в зависимости от этого.

  • dtsmake

    Этот выглядит очень многообещающим. Это зависит от Ternjs, который некоторые редакторы используют для предоставления автозаполнения для JS-кода.

    Проверьте это также для других имен инструментов и сравнений с ними.

Ответ 3

Для других людей, которые находят это сообщение через google: есть генератор сейчас самой Microsoft: dts-gen.

Ответ 4

В моей конкретной ситуации, когда я работал с запутанным кодом от третьего лица, мне было удобно загружать script на странице, а затем использовать консоль для регистрации экземпляра объекта с запутанным классом. Консоль дает вам аккуратное резюме методов и свойств класса, которые вы можете скопировать и использовать в качестве начальной точки файла определения.

> o = new ObfuscatedClass()
> console.log(o)
ObfuscatedClass
- methodA(a,b){some implementation}
- methodB(a,b){other implementation} etc

который вы можете скопировать вставку и изменить на

declare class ObfuscatedClass {

    methodA(a,b);
    methodB(a,b);

}

Ответ 5

Если вы пытаетесь использовать стороннюю библиотеку JavaScript в вашем файле TypeScript, вы можете создать собственный (и почти пустой) файл объявления в любом месте вашего проекта.

Например, если вы хотите импортировать:

import * as fooLibrary from 'foo-lib';

Вы создали бы новый файл с именем 'foo-lib.d.ts' со следующим содержимым:

declare module 'foo-lib' {
  var fooLibrary: any;
  export = fooLibrary;
}