Я использую много библиотек, как своих, так и сторонних. Я вижу, что каталог "typings" содержит некоторые для Jquery и WinRT ... но как они создаются?
источник
Я использую много библиотек, как своих, так и сторонних. Я вижу, что каталог "typings" содержит некоторые для Jquery и WinRT ... но как они создаются?
В зависимости от библиотеки, от того, как она написана и какой уровень точности вы ищете, вам доступно несколько вариантов. Давайте рассмотрим варианты в порядке убывания желательности.
Всегда сначала проверяйте DefinitiveTyped ( https://github.com/DefiniteTyped/DefiniteTyped ). Это репозиторий сообщества, полный буквально тысяч файлов .d.ts, и вполне вероятно, что то, что вы используете, уже есть. Вам также следует проверить TypeSearch ( https://microsoft.github.io/TypeSearch/ ), который является поисковым механизмом для опубликованных NPM файлов .d.ts; это будет иметь немного больше определений, чем DefinitiveTyped. Несколько модулей также поставляют свои собственные определения как часть своего дистрибутива NPM, поэтому также посмотрите, так ли это, прежде чем пытаться написать свои собственные.
TypeScript теперь поддерживает --allowJs
флаг и сделает больше выводов на основе JS в файлах .js. Вы можете попробовать включить файл .js в компиляцию вместе с --allowJs
настройкой, чтобы проверить, дает ли это достаточно хорошую информацию о типе. TypeScript распознает такие вещи, как классы в стиле ES5 и комментарии JSDoc в этих файлах, но может сработать, если библиотека странным образом инициализирует себя.
--allowJs
Если --allowJs
вам дали неплохие результаты , и вы хотите , чтобы написать лучший файл определения себя, вы можете комбинировать --allowJs
с , --declaration
чтобы увидеть «лучшее предположение» Машинописи по адресу типов библиотеки. Это даст вам достойную отправную точку и может быть таким же хорошим, как и файл, созданный вручную, если комментарии JSDoc хорошо написаны и компилятор смог их найти.
Если --allowJs
это не сработало, вы можете использовать dts-gen ( https://github.com/Microsoft/dts-gen ), чтобы получить отправную точку. Этот инструмент использует форму объекта во время выполнения для точного перечисления всех доступных свойств. С положительной стороны это имеет тенденцию быть очень точным, но инструмент еще не поддерживает очистку комментариев JSDoc для заполнения дополнительных типов. Вы запускаете это так:
npm install -g dts-gen
dts-gen -m <your-module>
Это сгенерирует your-module.d.ts
в текущей папке.
Если вы просто хотите сделать все это позже и какое-то время обходиться без типов, в TypeScript 2.0 вы можете написать
declare module "foo";
который позволит вам import
в "foo"
модуль с типом any
. Если у вас есть глобальный, с которым вы хотите иметь дело позже, просто напишите
declare const foo: any;
который даст вам foo
переменную.
--declarations
генерирует как.js
файл, так и.d.ts
файл, что означает, что вам нужно всего лишь запустить одну компиляцию.--allowJs
с--declaration
параметрами не могут быть объединены (проверено в TypeScript 1.8 и 2.0). Если я попытаюсь, я получу:error TS5053: Option 'allowJs' cannot be specified with option 'declaration'
Вы можете использовать
tsc --declaration fileName.ts
как Райан описывает, или вы можете указатьdeclaration: true
приcompilerOptions
в вашемtsconfig.json
предположении , что вы уже имелиtsconfig.json
под свой проект.источник
tsc --declaration test.ts
получить ошибкуCannot find name...
для типов, для которых я пытаюсь создать файл объявления :) Итак, мне нужны типы, прежде чем я смогу их объявить?declaration: true
в свойtsconfig.json
файл?Лучший способ справиться с этим (если файл объявлений недоступен для DefinitiveTyped ) - это писать объявления только для тех вещей, которые вы используете, а не для всей библиотеки. Это значительно сокращает работу - и, кроме того, компилятор может помочь, жалуясь на отсутствующие методы.
источник
Как говорит Райан, компилятор tsc имеет переключатель,
--declaration
который генерирует.d.ts
файл из.ts
файла. Также обратите внимание, что (исключая ошибки) предполагается, что TypeScript способен компилировать Javascript, поэтому вы можете передавать существующий код javascript в компилятор tsc.источник
как описано в http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript в 00:33:52, они создали инструмент для преобразования метаданных WebIDL и WinRT в TypeScript d.ts
источник
Вот некоторый PowerShell, который создает один файл определения TypeScript, библиотеку, которая включает несколько
*.js
файлов с современным JavaScript.Сначала измените все расширения на
.ts
.Во-вторых, используйте компилятор TypeScript для генерации файлов определений. Там будет куча ошибок компилятора, но мы можем игнорировать их.
Наконец, объедините все
*.d.ts
файлы в одинindex.d.ts
, удаливimport
операторы и удаливdefault
из каждого оператора экспорта.Это заканчивается одним пригодным для использования
index.d.ts
файлом, который включает в себя множество определений.источник
Я бы искал существующее отображение ваших сторонних JS-библиотек, которые поддерживают Script # или SharpKit. Пользователи этих кросс-компиляторов C # to .js столкнутся с проблемой, с которой вы сейчас столкнулись, и, возможно, опубликовали программу с открытым исходным кодом для сканирования вашей сторонней библиотеки lib и преобразования в скелетные классы C #. Если это так, взломайте программу сканера, чтобы сгенерировать TypeScript вместо C #.
В противном случае преобразование общедоступного интерфейса C # для вашей сторонней библиотеки в определения TypeScript может быть проще, чем делать то же самое, читая исходный JavaScript.
Меня особенно интересует среда ExtJS RIA от Sencha, и я знаю, что были опубликованы проекты по созданию интерпретации C # для Script # или SharpKit
источник
При создании вашей собственной библиотеки вы можете создавать
*.d.ts
файлы с помощью командыtsc
(TypeScript Compiler), например, так: (при условии, что вы собираете свою библиотеку вdist/lib
папку)-d
(--declaration
): генерирует*.d.ts
файлы--declarationDir dist/lib
: Выходной каталог для сгенерированных файлов объявлений.--declarationMap
: Создает исходную карту для каждого соответствующего файла .d.ts.--emitDeclarationOnly
: Только генерировать файлы объявлений '.d.ts'. (без скомпилированного JS)(см. документацию по всем параметрам компилятора командной строки)
Или, например, в вашем
package.json
:а затем запустить:
yarn build:types
(илиnpm run build:types
)источник
d.ts
файлы и использовать интерфейсы. У вас есть примеры?*.d.ts
файлы и поместит их вdist/lib
папку. Вам нуженtsconfig.json
файл в корне вашего проекта, но он должен быть там, чтобы проект работал в любом случае.