Я буду делать это шаг за шагом с пояснениями, так что это может показаться длинным, но следование приведенным инструкциям займет всего несколько минут. Фактически, вот короткая версия, которую вы можете просто запустить в bash или PowerShell!
mkdir -p ./local-types/foo
cd ./local-types/foo
npm init --scope types --yes
echo "export function hello(): void; export function world(): void" > ./index.d.ts
cd ../..
npm install ./local-types/foo
Фон
Представим следующую структуру проекта:
proj/
├─ tsconfig.json
└─ src/
└─ ...
Создайте папку локальных типов в корне вашего проекта.
Неважно, как он называется, но мы назовем его local-types
. Вы можете изменить его на все, что захотите, как только хорошо поймете, что мы здесь сделали.
proj/
├─ tsconfig.json
├─ local-types/
└─ src/
└─ ...
В большинстве случаев, кроме этого примера, я мог бы просто назвать это types
.
Создайте новый пакет в каталоге локальных типов.
Поскольку вы пытаетесь импортировать модуль с именем foo
, мы создадим папку с именем foo
с расширением index.d.ts
.
// local-types/foo/index.d.ts
export function hello(): void;
export function world(): void;
Мы также хотим сделать это пакетом npm, создав package.json:
cd local-types/foo
npm init --scope types --yes
На этом этапе ваш проект должен выглядеть так:
proj/
├─ tsconfig.json
├─ local-types/
| └─ foo/
| └─ index.d.ts
| └─ package.json
└─ src/
└─ ...
Теперь вы сможете просто импортировать foo
из любого файла в пределах src
.
import { hello, world } from "foo";
hello();
world();
Имейте в виду, что у вас может не быть пакета с одной точкой входа с index.d.ts
. В этом случае вы захотите имитировать структуру пакета, как она была опубликована в npm.
Добавьте пакет в качестве зависимости (или, возможно, devDependency)
Если вы пишете библиотеку, вы, вероятно, захотите использовать это в своих зависимостях, но приложения могут захотеть использовать devDependencies. Просто добавьте file:./local-types/foo
в качестве версии для @types/foo
:
"dependencies": {
"@types/foo": "file:local-types/foo"
}
Опубликовать в DefinitelyTyped
Являются ли ваши файлы .d.ts
полными и полезными? Подумайте о том, чтобы написать несколько тестов и отправить запрос на извлечение в DefinitelyTyped, чтобы другие могли извлечь выгоду из проделанной вами работы!
Если вы сможете без проблем импортировать эти пакеты во время выполнения, у вас уже будет соответствующая структура пакета.
О чем следует помнить
person
Daniel Rosenwasser
schedule
28.06.2017