用于原型设计多维数组的typescript接口语法?

时间:2015-02-05 08:47:38

标签: javascript jquery multidimensional-array typescript typescript1.4

我正在尝试使用typescript为二维数组添加一些扩展方法。

对于1维数组,语法很简单: e.g。

interface Array<T> {
    randomize();  
}
Array.prototype.randomize = function () {
    this.sort(() => (Math.round(Math.random()) - 0.5));
}

我希望我能用二维数组做类似的事情,但以下内容不起作用:

interface Array<Array<T>> {
    test();
}

在Typescript中是否可以在二维数组上进行原型处理?

1 个答案:

答案 0 :(得分:1)

没有任何类型的系统机制。从根本上说,在运行时,Array.prototype要么具有randomize功能,要么它没有。您可以编写一个具有约束的独立函数:

function flatten<T extends Array<any>>(arr: T[]): T {
    return null; // TODO implement
}

var x: string[][] = /* ... */;
var y = flatten(x); // y: string[]
var z = flatten(y); // error

顺便说一句,你不应该认真使用randomize功能。许多排序算法依赖于排序的传递性(A > BB > C暗示A > C)或稳定性(A > B暗示A > B),您的函数不会保留。这最多是非均匀的,最坏的情况可能会导致某些运行时崩溃。