如何在Typescript中定义数字 - >字符串字典?

Kal*_*exx 11 typescript

我正在玩Typescript并通过Javascript将一个小型库转换为它.在代码的一个区域中,存在静态定义的友好密钥名称与其密钥代码的映射.原始代码看起来像:

keys: { "Backspace": 8, "Tab": 9, "Enter": 13, ....etc.. };
Run Code Online (Sandbox Code Playgroud)

我通过以下方式在打字稿中定义了:

static keys: { [name: string]: number; } = { "Backspace": 8, "Tab": 9, "Enter": 13, ... etc.. };
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但代码的另一部分使用相反的映射:

    chars: {8:"Backspace",9:"Tab",13:"Enter", ...etc... };
Run Code Online (Sandbox Code Playgroud)

所以我尝试在我之前做的打字稿中做同样类型的定义:

chars: { [code: number]: string; } = { 8: "Backspace", 9: "Tab", 13: "Enter", ...etc.. };
Run Code Online (Sandbox Code Playgroud)

无法编译时出现以下错误:

无法转换'{0:string; 1:字符串; 2:字符串; 4:字符串; 8:字符串; 9:字符串; :string; }'to'{{name:number]:string; }':类型'{0:string;的索引签名; 1:字符串; 2:字符串; 4:字符串; 8:字符串; 9:字符串; :string; }'和'{[name:number]:string; }'不相容

如何在Typescript中定义此映射?

MiM*_*iMo 9

问题是在JavaScript中 - 因此在TypeScript中 - 对象文字的键始终是字符串,因此不能将其分配给带有数字索引器的变量.

具有数字索引器的对象是一个数组 - 因此您必须这样做:

var chars: string[] = [];
chars[8]= "Backspace";
chars[9]= "Tab";
chars[13] = "Enter";
Run Code Online (Sandbox Code Playgroud)