为什么我不能在 Typescript 地图上调用 keys()?
Why I can't call keys() on a Typescript Map?
在 Typescript 程序 (3.9.6) 中,我有一个变量 p,我认为它是一个 Map。从 console.log(p) 我得到:
Map(2) { 'A' => 0, 'B' => 2}
但是,看起来我无法获取密钥:console.log(p.keys()) 甚至无法编译:
error TS2349: This expression is not callable.
Type 'Number' has no call signatures.
console.log(p.keys());
变量p好像出自这里:
function f(q: IQ){
...
let p=q.data;
console.log(p);
console.log(p.keys());
...
其中智商定义为
export interface IQ {
data: IData;
}
export interface IData {
[key: string]: number
}
不知道出了什么问题,我卡住了
p
是 IData
类型,而不是 Map
(或者至少 TypeScript 在编译时是这样认为的)。
如果在运行时确实是一个IData
,使用Object.keys(p)
获取密钥。
如果它真的是一个Map
,你可以像console.log((p as any as Map<string, number>).keys())
一样投射它。但是,这意味着类型不正确,最好修复类型而不是转换。
在 Typescript 程序 (3.9.6) 中,我有一个变量 p,我认为它是一个 Map。从 console.log(p) 我得到:
Map(2) { 'A' => 0, 'B' => 2}
但是,看起来我无法获取密钥:console.log(p.keys()) 甚至无法编译:
error TS2349: This expression is not callable.
Type 'Number' has no call signatures.
console.log(p.keys());
变量p好像出自这里:
function f(q: IQ){
...
let p=q.data;
console.log(p);
console.log(p.keys());
...
其中智商定义为
export interface IQ {
data: IData;
}
export interface IData {
[key: string]: number
}
不知道出了什么问题,我卡住了
p
是 IData
类型,而不是 Map
(或者至少 TypeScript 在编译时是这样认为的)。
如果在运行时确实是一个IData
,使用Object.keys(p)
获取密钥。
如果它真的是一个Map
,你可以像console.log((p as any as Map<string, number>).keys())
一样投射它。但是,这意味着类型不正确,最好修复类型而不是转换。