Javascript 多维数组原型的typescript接口语法?

Javascript 多维数组原型的typescript接口语法?,javascript,jquery,multidimensional-array,typescript,typescript1.4,Javascript,Jquery,Multidimensional Array,Typescript,Typescript1.4,我正在尝试使用typescript为二维数组添加一些扩展方法 对于一维数组,语法很简单: e、 g 接口数组{ 随机化(); } Array.prototype.randomize=函数(){ this.sort(()=>(Math.round(Math.random())-0.5)); } 我希望我可以用二维数组做类似的事情,但以下方法不起作用: interface Array<Array<T>> { test(); } 接口数组{ test(); } 在

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

对于一维数组,语法很简单: e、 g

接口数组{
随机化();
}
Array.prototype.randomize=函数(){
this.sort(()=>(Math.round(Math.random())-0.5));
}
我希望我可以用二维数组做类似的事情,但以下方法不起作用:

interface Array<Array<T>> {
    test();
}
接口数组{
test();
}

在Typescript中,是否可以在二维数组上实现prototye?

没有任何类型系统机制可以实现这一点。基本上,在运行时,
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
函数展平(arr:T[]):T{
返回null;//TODO实现
}
变量x:string[][]=/*…*/;
变量y=展平(x);//y:string[]
var z=展平(y);//错误


另一方面,您不应该认真使用该函数。许多排序算法依赖于排序的传递性(
A>B
B>C
意味着
A>C
)或稳定性(
A>B
意味着
A
),而您的函数不保留这一点。这充其量将是非均匀的,最坏的情况下可能会导致一些运行时崩溃。

我不确定是否理解“在运行时Array.prototype具有随机性或不具有随机性”。下面的javascript代码用于将扩展方法添加到数组中:Array.prototype.randomize=function(){this.sort(function(){return(Math.round(Math.random())-0.5);};};我的问题是,我无法为二维情况做类似的事情(使用typescript)。我肯定能够在1d的情况下使用我的随机化扩展方法。注意:感谢您对randomize的评论,事实上这只是一个蹩脚的示例,不是重点,我应该调用方法测试()。实际上,我应该在Visual studio 2013中添加一点,在我的typeiscript中,对于1D案例,我看到警告“扩展本机对象的原型”数组可能会产生意外的副作用”,不确定这些副作用可能是什么。。。
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