我正在玩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中定义此映射?
问题是在JavaScript中 - 因此在TypeScript中 - 对象文字的键始终是字符串,因此不能将其分配给带有数字索引器的变量.
具有数字索引器的对象是一个数组 - 因此您必须这样做:
var chars: string[] = [];
chars[8]= "Backspace";
chars[9]= "Tab";
chars[13] = "Enter";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15341 次 |
| 最近记录: |