全局(在模块内)向原型添加函数

时间:2016-08-10 16:01:18

标签: javascript typescript module typescript1.8

我想在一个模块中向Typescript(1.8)中的Array原型添加一个函数。

我正在改变utils.ts文件中的原型:

declare global {
    interface Array<T> {
        remove(obj: any): void;
    }
}

Array.prototype.remove = function(obj) {
    var idx = this.indexOf(obj);
    if (idx > -1) {
        this.splice(idx, 1);
    }
}

现在我想在我的main.ts文件中全局应用这种更改,就像这样:

import {Array<T>.remove} from "./utils.ts"

let arr = ["an", "array"];
arr.remove("array");

我可以导入接口声明但是main.ts文件中没有对Array原型的更改。如何更改原型并全局应用或以某种方式导入“删除”功能?

1 个答案:

答案 0 :(得分:2)

这对我有用:

test.ts:

export {};

declare global {
    interface Array<T> {
        remove(obj: any): void;
    }
}

Array.prototype.remove = function(obj) {
    var idx = this.indexOf(obj);
    if (idx > -1) {
        this.splice(idx, 1);
    }
}

test2.ts:

import "./test";

let arr = ["an", "array"];
arr.remove("array");
console.log(arr);

编译并运行:

tsc -m "commonjs" ./test2.ts
node ./test2.js

输出:

[ 'an' ]