如何使用类型索引创建类似于脚本数组的结构?

时间:2018-01-06 04:44:56

标签: javascript typescript

在打字稿声明文件(directions.d.ts)中,到目前为止我有以下代码:

interface DIRECTION {}
declare const TOP: DIRECTION;
declare const TOP_RIGHT: DIRECTION;
declare const RIGHT: DIRECTION;
declare const BOTTOM_RIGHT: DIRECTION;
declare const BOTTOM: DIRECTION;
declare const BOTTOM_LEFT: DIRECTION;
declare const LEFT: DIRECTION;
declare const TOP_LEFT: DIRECTION;

declare const MOVE_COST:{
    [index: DIRECTION]: number
}

我的目标是能够以类型敏感的方式使用MOVE_COST(例如)

console.log(MOVE_COST[TOP]) // This is valid.
console.log(MOVE_COST[BOTTOM]) // This is valid.
console.log(MOVE_COST[3]) // This should be an error.

现在,最后,这些常量(例如TOP,BOTTOM等)都被定义为执行环境中的整数,因此用它们索引MOVE_COST数组是完全有效的。

但是,打字稿总是抛出

error TS1023: An index signature parameter type must be 'string' or 'number'.

我应该如何声明MOVE_COST以便按照我希望的方式访问它?

1 个答案:

答案 0 :(得分:2)

以下打字稿代码应该是最接近您想要的方式,因为索引签名参数必须是字符串或数字。

Link to CodePen Sample

var data = response.json()