#javascript #typescript #architecture #open-source #definitelytyped
#javascript #typescript #архитектура #с открытым исходным кодом #definitelytyped
Вопрос:
Если бы вы написали свою собственную библиотеку typescript с открытым исходным кодом, как бы вы структурировали typescript и определения typescript? Насколько я понимаю, файлы определений действительно существуют для компилятора, так что, когда ваша библиотека будет использована, intellisense поможет потребителю.
Однако, как файлы определений работают внутри при разработке библиотеки? Не могли бы вы поместить все свои типы (интерфейсы, классы и т. Д.) В файл {module}.d.ts и ссылаться на файл определения внутри, чтобы вам не приходилось записывать типы дважды (один раз в {module}.ts и один раз в {module}.d .ts?
В параметрах компилятора typescript какой смысл устанавливать для «объявления» значение true? Мне не кажется полезным автоматизировать создание файла определения, если это не будет очень полезно (например, комментарии).
Если в вашей библиотеке несколько модулей, вы бы написали отдельные определения для каждого модуля и добавили ссылки между определениями, а затем объединили их с помощью некоторого автомата (например, gulp, grunt)?
Каков рекомендуемый способ предоставления доступа к вашей библиотеке, чтобы и пользователи typescript, и пользователи javascript могли использовать вашу библиотеку?
Как бы вы написали тесты на typescript? Вы бы импортировали модули typescript в свои тестовые файлы?
Ответ №1:
При разработке вашей библиотеки на typescript вы не используете определения своих собственных классов. Они являются «автономными» и уже предоставляют всю информацию о типе для transpiler / IDE. Определения, как вы упомянули для внешних потребителей.
Смысл установки declaration
значения true заключается в том, чтобы избавиться от утомительной работы по сбору информации о типах из классов typescript и вставке ее в файлы определений. Как я уже сказал, эта информация уже присутствует в файлах typescript и может быть автоматически извлечена transpiler.
Что касается способа организации ваших определений и их предоставления — я уверен, что существует несколько разных способов, одно можно сказать наверняка — вы не хотите писать одни и те же определения классов вручную в двух местах. Сказав это, я могу дать вам пример того, как я раскрываю проект библиотеки и использую его в другом. Обратите внимание на файлы index.ts там и на то, как корневой отображается в package.json -> typings
поле. Там вы также найдете примеры модульных тестов для библиотеки через jasmine.
Надеюсь, это даст вам некоторую информацию о том, как продвигаться в процессе разработки вашей библиотеки.
Комментарии:
1. не могли бы вы исправить ссылки, они больше не работают