Создайте один файл объявления для библиотеки TypeScript

Я разработал библиотеку, которая также содержит файлы TypeScript, в Visual Studio 2013. Файлы правильно компилируются в файлы JS (AMD).

Я хочу создать один файл объявления для этой библиотеки, но это не работает:

tsc --declaration --module AMD --out out.d.ts [files.ts]

Может ли кто-нибудь привести меня на правильный путь?

Используется TypeScript 0.9.1.1.


person bobschi    schedule 30.10.2013    source источник


Ответы (4)


Это потому, что вы предоставляете .d.ts для выхода, который перезапишет файл объявления содержимым js. Кроме того, вам необходимо удалить module amd, потому что это работает для каждого файла (не подходит для --out, см. http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1)

Поэтому постарайтесь:

tsc [files.ts] --declaration --out out.js

который будет генерировать out.d.ts

person basarat    schedule 30.10.2013
comment
Изменено на tsc --declaration --module AMD --out out.js [files.ts], который теперь генерирует файлы js и d.ts, НО отдельно для каждого исходного файла. - person bobschi; 30.10.2013
comment
Теперь я получаю: «ошибка TS5037: не удается скомпилировать внешние модули, если не указан флаг --module». - person bobschi; 30.10.2013
comment
Если ваша библиотека предназначена для использования AMD, вы не можете объединить ее с одним js (для которого вы будете использовать r.js) или с одним .d.ts (для которого нет альтернативного решения) с помощью tsc. - person basarat; 31.10.2013
comment
out переименован в outFile, и вместе с --outFile поддерживаются только модули amd и system. (2018) - person Onur Yıldırım; 11.08.2018

Вы всегда можете сделать это постфактум с помощью вызовов командной строки. В Visual Studio используйте следующий код в качестве вызова командной строки события после сборки:

del $(OutDir)combined.d.ts
type $(OutDir)*.d.ts > $(OutDir)combined.d.ts

Это может быть $(ProjectDir)Some\Other\Path\*.d.ts и т. д. Подробнее см. здесь.

person Andy W    schedule 30.10.2013
comment
это не сработает, так как локальный импорт не будет разрешен (например: import { plugin1 } from './lib';) - person YoniXw; 23.10.2020

Создайте один файл объявления для Typescript lib.

Вам не нужно этого делать (или, по крайней мере, вы не предоставили для этого вариант использования).

Ваша выходная папка, например. /module/bar должно выглядеть так:

  • index.js ‹ создано .js для /module/bar.ts
  • index.d.ts ‹ создано .d.ts для /module/bar.ts

И когда пользователям требуется /module/bar, среда выполнения разрешается в .js, а система типов TypeScript автоматически разрешается в .d.ts.

Примеры

person basarat    schedule 13.08.2018

В дополнение к ответу Andy W вы захотите удалить линии эталонного пути. Используйте НАЙТИ, чтобы сделать это.

del "$(ProjectDir)bin\combined.d.ts"
type "$(ProjectDir)*.d.ts" "$(ProjectDir)subFolder1\*.d.ts" "$(ProjectDir)subFolder2\*.d.ts" | FIND /V /I "/// <reference path="  > "$(ProjectDir)bin\combined.d.ts"
person RockResolve    schedule 17.12.2014