Я использую много библиотек как моя собственная и третья стороны. Я вижу каталог «типизации» содержит некоторые для Jquery и WinRT ... но как они созданы?
Как вы производите .d.ts «типизация» файловое определение из существующей библиотеки JavaScript?
Есть несколько вариантов, доступных для вас в зависимости от библиотеки в вопросе, как это написано, и то, что уровень точности вы ищете. Давайте рассмотрим варианты, примерно в порядке убывания желательности.
Может быть, он уже существует
Всегда проверяйте DefinitelyTyped ( https://github.com/DefinitelyTyped/DefinitelyTyped ) первым. Это сообщество репо полный буквально тысячи .d.ts файлов , и это очень вероятно , что вы используете уже есть. Вы должны также проверить TypeSearch ( https://microsoft.github.io/TypeSearch/ ) , который является поисковой системой для НПХ опубликованного .d.ts файлов; это будет иметь немного больше определений , чем DefinitelyTyped. Несколько модулей также судоходство своих собственных определений , как часть их распределений НПХ, так и увидеть , если это так , прежде чем пытаться написать свой собственный.
Может быть, Вам не нужен
Машинопись теперь поддерживает --allowJsфлаг и будет делать больше умозаключения JS основанный в .js файлов. Вы можете попробовать в том числе .js файл в компиляции вместе с --allowJsустановкой , чтобы увидеть , если это дает вам достаточно хорошую информацию о типе. Машинопись будет распознавать такие вещи , как классы ES5 стиля и комментарии JSDoc в этих файлах, но может получить подножку , если библиотека инициализирует себя в странном образе.
Начни --allowJs
Если --allowJsвам дали неплохие результаты , и вы хотите , чтобы написать лучшее определение файл самостоятельно, вы можете комбинировать --allowJsс , --declarationчтобы увидеть «лучшее предположение» Машинописи по адресу типов библиотеки. Это даст вам достойную отправную точку, и может быть столь же хорошо , как вручную автором файла , если комментарии JSDoc хорошо написаны , и компилятор смог найти их.
Начало работы с DTS-ген
Если --allowJsне работает, вы можете использовать DTS-ген ( https://github.com/Microsoft/dts-gen ) , чтобы получить отправную точку. Этот инструмент использует форму выполнения объекта точно перечислить все доступные свойства. С положительной стороны это имеет тенденцию быть очень точными, но инструмент не поддерживает выскабливание комментариев JSDoc для заполнения дополнительных типов. Вы запускаете это примерно так:
npm install -g dts-gen
dts-gen -m <your-module>
Это создаст your-module.d.tsв текущей папке.
Нажмите кнопку Snooze
Если вы просто хотите, чтобы сделать это все позже и идти без типов на некоторое время, в машинописном 2.0 теперь вы можете написать
declare module "foo";
который позволит вам importв "foo"модуль с типом any. Если глобальный вы хотите иметь дело с более поздними, просто написать
declare const foo: any;
который даст вам fooпеременную.
Вы можете использовать tsc --declaration fileName.tsкак Райан описывает, или вы можете указать declaration: trueпри compilerOptionsв вашем tsconfig.jsonпредположении , что вы уже имели tsconfig.jsonпод свой проект.
Лучший способ справиться с этим (если декларация файл не доступен на DefinitelyTyped ), чтобы написать заявления только для вещей , которые вы используете , а не всю библиотеку. Это уменьшает работу много - и , кроме того, компилятор там , чтобы помочь, жалуясь методов отсутствует.
Как говорит Райан, ТСК компилятор имеет переключатель , --declarationкоторый генерирует .d.tsфайл из .tsфайла. Также обратите внимание , что ( за исключение ошибок) Машинопись должна иметь возможность компилировать Javascript, поэтому вы можете передать существующий яваскрипта кода в TSC компилятор.
как описано в http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript в 00:33:52 они создали инструмент для преобразования WebIDL и WinRT метаданных в машинопись d.ts
Вот некоторые PowerShell , который создает один файл определения машинописи библиотеки , которая включает в себя несколько *.jsфайлов с современным JavaScript.
Во- первых, изменить все эти расширения .ts.
Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }
Во-вторых, использовать машинопись компилятор для генерации файлов определений. Там будет куча ошибок компилятора, но мы можем игнорировать их.
Get-ChildItem | foreach { tsc $_.Name }
И, наконец, объединить все *.d.tsфайлы в один index.d.ts, удалив importзаявления и удаление defaultот каждого экспорта заявления.
Remove-Item index.d.ts;
Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
foreach { Get-Content $_ } | `
where { !$_.ToString().StartsWith("import") } | `
foreach { $_.Replace("export default", "export") } | `
foreach { Add-Content index.d.ts $_ }
Это заканчивается один, используемым index.d.tsфайлом , который включает в себя многие из определений.
Я хотел бы посмотреть на существующее отображение ваших третьи сторонних библиотек JS, которые поддерживают Script # или SharpKit. Пользователи этих C # в .js кросс-компилятор будет столкнулись с проблемой теперь столкнуться и, возможно, опубликовали исходную программу открытой для сканирования 3-й партии библиотеки, и преобразовать в классы скелет C #. Если так взломать программу сканера, чтобы генерировать машинопись вместо C #.
В противном случае, перевод общедоступный интерфейс C # для 3-й партии Lib в определениях машинопись может быть проще, чем делать то же самое, прочитав источник JavaScript.
Мой особый интерес ExtJS RIA рамка Сенч, и я знаю, там были проекты опубликованы для генерации C # для интерпретации сценария # или SharpKit
При создании собственной библиотеки, вы можете можете создать *.d.tsфайлы с помощью tscкоманды (машинопись Compiler) следующим образом: (предполагается , что вы создаете свою библиотеку в dist/libпапку)
tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
-d(--declaration): Генерирует*.d.tsфайлы--declarationDir dist/lib: Выходной каталог для создаваемых файлов декларации.--declarationMap: Формирует sourcemap для каждого соответствующего файла».d.ts.--emitDeclarationOnly: Только испускают декларации файлы».d.ts. (Не составлен JS)
(см документации для всех параметров командной строки компилятора)
Или, например , в вашем package.json:
"scripts": {
"build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}
а затем запустить: yarn build:types(или npm run build:types)













