Как дополнить определение модуля UMD в TypeScript 2

#typescript #typescript-typings #typescript2.0

#typescript #typescript-типизации #typescript2.0

Вопрос:

В настоящее время я пишу файлы определений TypeScript для двух библиотек, которые должны использоваться с помощью нового @types подхода. Оба следуют шаблону UMD. Вы можете использовать их либо как модуль, либо путем ссылки на них в <script> теге.

Первый вариант был прост в написании, поскольку два способа использования будут выглядеть следующим образом:

 import { AccessManager } from 'twilio-common';
const manager = new AccessManager('XXXXXXXX');
  

или

 const manager = new Twilio.AccessManager('XXXXXXXX');
  

Я решил эту проблему, используя новую export as namespace функцию TypeScript 2:

 import { Promise } from 'es6-promise';

export as namespace Twilio;

export class AccessManager {
  constructor(initialToken: string);
  identity: string | null;
  // omitted
}
  

Теперь для второго модуля это становится немного сложнее, и поэтому я пишу здесь.

Использование через модуль:

 import { AccessManager } from 'twilio-common';
import { Client } from 'twilio-ip-messaging';

const manager = new AccessManager('XXXXXXXX');
const client = new Client(manager);
  

Использование через <script> тег:

 const manager = new Twilio.AccessManager('XXXXXXXX');
const client = new Twilio.IPMessaging.Client('XXXXXXXX');
  

Итак, как вы можете видеть, что экспортируется во втором определении, файлы должны быть экспортированы с использованием строки типа:

 export as namespace Twilio.IPMessaging;
  

Однако это не работает. Поскольку я не могу выяснить, какое здесь правильное решение, я обращаюсь к StackOverflow за советом.

Заранее большое спасибо!

Доминик

Ответ №1:

Вы также могли бы объявить пространство имен twilio с вложенным пространством имен IPMessaging и экспортировать «Twilio» в качестве глобального пространства имен.

Это заставит Twilio отображаться в качестве импортируемой цели для модулей, хотя