我目前正在为两个应该通过新@types
方法使用的库编写TypeScript定义文件。两者都遵循UMD模式。您可以将它们作为模块使用,也可以在<script>
标记中引用它们。
第一个是直接写的,因为两种消费方式看起来像这样:
import { AccessManager } from 'twilio-common';
const manager = new AccessManager('XXXXXXXX');
或
const manager = new Twilio.AccessManager('XXXXXXXX');
我通过使用TypeScript 2的新export as namespace
功能解决了这个问题:
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寻求建议。
提前多多感谢!
多米尼克
答案 0 :(得分:2)
您还可以使用IPMessaging的子命名空间声明twilio命名空间,并将“Twilio”导出为全局命名空间。
虽然
会使Twilio成为模块的可导入目标