如何在AMD TypeScript程序中构建扩展

时间:2013-11-20 19:55:45

标签: typescript amd

我在TypeScript中编写一个程序,主要遵循AMD加载模式,使用import语句加载类。

import TestRunner = require('../TS/TestRunner');
但是,我确实希望包含一些扩展方法来扩展NodeList等对象 - 所以会有少量扩展文件包含lib.d.ts接口的扩展,然后是实现附加功能 - 例如......

interface NodeList {
    extensionMethod(...info): NodeList;
}

NodeList.prototype.extensionMethod = function (...info: string[]) {
    return this;
};

可以只包含我程序开头的所有扩展程序,以便它们可用 - 但我实际上希望像其他代码一样按需加载它们。问题是,包含扩展名的文件并没有真正导出任何要使用的内容 - 它只是将此代码添加到现有对象中。

在我的TypeScript程序中包含扩展名的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个有效的设置。要点:

  • 您需要将interface扩展名放在外部模块的文件中(否则您将在外部模块范围内声明新接口而不是扩展现有的类型)。
  • 这仅适用于在全局范围内定义的对象。扩展其他对象的原型已经足够危险,因此该帐户没有大的损失。
  • 您需要手动调用require。对于AMD方案,请使用未记录的/// <amd-depdendency path="path" />标记。
  • 如果需要,包含扩展名的文件可以是外部模块。

<强> myExtensions.d.ts

// In case you're not using node.d.ts
declare var process: process;

interface process {
    getFour: any;
}

<强> extensions.ts

/// <reference path="myExtensions.d.ts" />

process.getFour = () => 4;

<强> consumer.ts

/// <reference path="myExtensions.d.ts" />

// In case you're not using node.d.ts
declare var require;

// Manual import of extensions
require('./extensions');

console.log(process.getFour()); // Works