Машинопись: компиляция объявлений внешнего модуля для публикации в NPM

Я ищу предложения по автоматическому включению объявлений внешнего модуля узла компиляции TypeScript (commonjs) для пакета npm, который я сейчас пишу на TypeScript. Кажется, я столкнулся с некоторыми проблемами в отношении понимания подходящего способа заставить TypeScript генерировать объявления внешних модулей для node / commonjs.

Для некоторой предыстории наш модуль в настоящее время публикуется с использованием модулей npm с ограниченным объемом, например, «@ company / module». Поэтому мы отмечаем, что для того, чтобы машинописный текст мог разрешить модуль с ограниченной областью видимости, ему необходимо полностью определенное объявление имени внешнего модуля «@ company / module», и оно относится к генерации именованных внешних модулей, и действительно, подходящий способ генерировать объявления внешних модулей из компилятора, в котором мы не уверены.

Наш модуль настроен примерно так, как в следующем примере.

TypeScript

Следующий код скомпилирован как index.js и bar.js соответственно.

// ./bar.ts
export class Bar {} 

// ./index.ts
import { Bar } from "./bar"

export class Foo {
   constructor(private bar: Bar) {}
}

Объявление TypeScript

Ниже приведен идеализированный вывод, который мы хотели бы сгенерировать из компилятора машинописного текста.

// ./index.d.ts

declare module "@company/module/bar" {
  export class Bar {}
}

declare module "@company/foo" {
  import { Bar } from "@company/module/bar"
  export class Foo {
    constructor(private bar: Bar)
  }
}

Похоже, что нет краткого / четкого способа сгенерировать указанное выше объявление непосредственно из TypeScript. Однако мы нашли способ обойти это, а именно:

  1. скомпилировать объявление отдельно, используя модуль: AMD - outFile (выдает пакет объявлений и "внешние" объявления)
  2. переписать скомпилированное объявление AMD и модуль объявления с префиксом "@ company / module" (включая импорт)

Похоже, что в репозитории TS есть несколько проблем с github, связанных с генерацией объединенных объявлений таким образом, но они, похоже, являются давними проблемами, на них ссылаются ниже.

Файл объявления пакета для пакетов commonjs - (кажется идеальным) https://github.com/Microsoft/TypeScript/pull/3159

Предложение: объединение определений типов модулей TS https://github.com/Microsoft/TypeScript/issues/4434

Я ищу другой опыт публикации объявлений npm библиотек TypeScript в NPM. Открыт для всех предложений!

Огромное спасибо


person Sinclair    schedule 08.08.2018    source источник


Ответы (1)


Ниже приведен идеализированный вывод, который мы хотели бы сгенерировать из компилятора машинописного текста.

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

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

  • index.js ‹сгенерировано .js для /module/bar.ts
  • index.d.ts ‹сгенерировано .d.ts для /module/bar.ts

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

Примеры

person basarat    schedule 08.08.2018
comment
большое спасибо. Взглянем на типографский стиль как на основу. Похоже, у нас возникли трудности с тем, чтобы TypeScript разрешил схему @ scope / module (по крайней мере, казалось, что он пытается разрешить только на уровне node_modules / module. Модули с областью видимости, похоже, испытывали трудности с включением в область видимости. Взглянем и сообщим . - person Sinclair; 08.08.2018
comment
Еще раз спасибо, Басарат. Да, я не знал, что TypeScript может разрешать объявления внешних модулей без явной необходимости цитировать их как таковые. Кажется, теперь модули с ограниченным объемом работают нормально. Я ценю вашу помощь ! - person Sinclair; 08.08.2018