Скажем, например, у вас есть библиотека npm, в моем случае mongoose
, как вы собираетесь генерировать d.ts
файлы?
Создание файлов декларации typescript из javascript
Ответ 1
JavaScript не всегда содержит достаточно информации о типе для компилятора TypeScript для вывода структур в вашем коде, поэтому автоматическое создание определения на основе JavaScript редко является вариантом.
Ниже приведены инструкции о том, как писать их с нуля:
https://www.stevefenton.co.uk/2013/01/complex-typescript-definitions-made-easy/
Но есть один трюк, который может работать (он работает только в ограниченном наборе случаев).
Если вы вставляете JavaScript в новый файл TypeScript, исправьте любые тривиальные ошибки, которые вы можете получить и скомпилируете с помощью флага определения, он может предоставить вам файл, который по крайней мере будет отправной точкой.
tsc --declaration js.ts
Ответ 2
Вопрос немного стар, но ради людей, пришедших из таких поисковых систем, как я, если вы ищете автоматизированный инструмент, проверьте:
-
Официальная отправная точка, которую Microsoft использует при создании типов. Это означало быть отправной точкой только, хотя и я не получал много удачи в зависимости от этого.
-
Этот выглядит очень многообещающим. Это зависит от 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;
}