Включить пользовательские наборы в модуль index.d.ts npm - PullRequest
0 голосов
/ 10 февраля 2020

Я сейчас пишу плагин для пн goose. Теперь, когда я использую TypeScript, у меня следующая ситуация. Я должен расширить существующий интерфейс. Это не проблема. Ради полноты я все же запишу:

src / typings / mon goose .d.ts

declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}

расширит существующий интерфейс через объявление слияния

Я включаю тип Root в свой tsconfig

tsconfig. json

"compilerOptions" : {
  ...
  "typeRoots": {
    "src/types",
    "node_modules/@types"
  }
}

При сборке модуля npm я использую флаг --declare также для экспорта типов. Теперь проблема в том, что пользовательских наборов нигде не найти. Конечно, я мог бы добавить его содержимое вручную в мой. / dist / index.d.ts , который бы работал, но это не совсем вариант, так как он не может быть автоматизирован и оставил бы много места за ошибки.

Есть ли лучший способ сделать это так, чтобы он работал с компилятором машинописи или хотя бы с модулем npm, который может позаботиться об этом?

1 Ответ

0 голосов
/ 10 февраля 2020

OK. Я наконец получил это на работу. Вот что я сделал, чтобы реализовать

Пользовательские наборы для стороннего npm модуля в вашем npm модуле

Вместо того, чтобы писать файл .d.ts, просто переключитесь в обычный файл .ts. Так что в моем случае

src / types / mon goose .ts

declare module 'mongoose' {
  export interface SomeExistingMongooseInterface {
    MyNewOption?: FancyOptionInterface
  }
}

Второй шаг - импортировать этот файл в ваше приложение. Мне просто было удобно добавить его в файл root, чтобы

src / index.ts

import "./types/mongoose"

И это уже все. Больше нечего делать. При создании приложения компилятор машинописи теперь генерирует файл mon goose .d.ts в dist / src / types папка, которая будет опубликована позже.

Все будет работать нормально, и если вы решите опубликовать sh на npm, ваши пользователи также получат выгоду от расширения стороннего интерфейса.

...