3

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

对于一维数组,语法很简单:例如

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

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

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

是否可以在 Typescript 中对二维数组进行原型设计?

4

1 回答 1

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),您的函数不会保留这些。这充其量是不统一的,最坏的情况可能会导致某些运行时崩溃。

于 2015-02-05T08:53:19.307 回答