打字稿注释问题:具有键值的数组

Typescript annotation question: arrays with key values

有谁知道 VSCode 为什么会这样?

interface Point {
    x: number;
    y: number;
}

let grid: [key: number, value: [key: number, value: Point]];

// ...

// Gives an object of type  number | [key: number, value: Point]
var col = grid[-5];
// Gives an object of type  number | Point
var pnt = (col as [key: number, value: Point])[-2];

谁能解释一下?

我希望他们不要 number |

这里正在初始化变量 let grid:

let grid: [key: number, value: [key: number, value: Point]];

这里 'key' 被设置为一个数字。如果不想return这部分,需要去掉key: number部分代码

这个:

let grid: [key: number, value: [key: number, value: Point]];

声明一个元组类型:一个有2个成员的数组,其中第一个是number类型,第二个是另一个元组,例如:

[3, [4, somePoint]]

使用对象而不是数组,这样 grid[someNum] 就会得到一列:

let grid: {
    [key: number]: {
        [key: number]: Point;
    };
}

您也可以考虑使用地图而不是动态 属性 名称(地图更适合这类事情,您偶尔会 运行 遇到此类动态 属性 TypeScript 中的名称)

type Col = Map<number, Point>;
const grid = new Map<number, Col>();