为什么我不能在 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
}

不知道出了什么问题,我卡住了

pIData 类型,而不是 Map (或者至少 TypeScript 在编译时是这样认为的)。

如果在运行时确实是一个IData,使用Object.keys(p)获取密钥。

如果它真的是一个Map,你可以像console.log((p as any as Map<string, number>).keys())一样投射它。但是,这意味着类型不正确,最好修复类型而不是转换。