我正在尝试使用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中是否可以在二维数组上进行原型处理?
答案 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 > B
,B > C
暗示A > C
)或稳定性(A > B
暗示A > B
),您的函数不会保留。这最多是非均匀的,最坏的情况可能会导致某些运行时崩溃。