#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 отображаться в качестве импортируемой цели для модулей, хотя