如何在TypeScript 2中扩充UMD模块定义

时间:2016-10-21 15:40:24

标签: typescript typescript-typings typescript2.0

我目前正在为两个应该通过新@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寻求建议。

提前多多感谢!

多米尼克

1 个答案:

答案 0 :(得分:2)

您还可以使用IPMessaging的子命名空间声明twilio命名空间,并将“Twilio”导出为全局命名空间。

虽然

会使Twilio成为模块的可导入目标