Typescript 索引签名';当尝试使用instanceof比较值时,它不起作用

Typescript 索引签名';当尝试使用instanceof比较值时,它不起作用,typescript,lodash,Typescript,Lodash,我需要遍历一个对象并访问其属性,使用lodash查找数组。我想检查键的属性是否是数组的实例。考虑以下事项: const记录:main记录={ 身份证号码:“10”, 第一场:“Foo”, __typename:“Main”, 相关的:[ { 身份证号码:“20”, 第二场:“酒吧”, __类型名称:“相关” }, { id:“21”, 第二场:“巴兹”, __类型名称:“相关” }, ] } //要迭代键并检查数组类型值吗 //无论属性的名称是什么。 _.keys(记录).map((键)=>{

我需要遍历一个对象并访问其属性,使用lodash查找数组。我想检查键的属性是否是
数组的
实例。考虑以下事项:

const记录:main记录={
身份证号码:“10”,
第一场:“Foo”,
__typename:“Main”,
相关的:[
{
身份证号码:“20”,
第二场:“酒吧”,
__类型名称:“相关”
},
{
id:“21”,
第二场:“巴兹”,
__类型名称:“相关”
},
]
}
//要迭代键并检查数组类型值吗
//无论属性的名称是什么。
_.keys(记录).map((键)=>{
控制台日志(键);
数组的记录[“相关”]实例//无TS编译器错误。
数组的记录[“id”]实例//TS编译器错误!
将[“id”]记录为数组的任何实例//这实际上很好。
record[key]instanceof Array//Error!(这就是我要做的)
将[key]记录为数组的任意实例//也是一个错误。这是为什么?
//if(记录数组的[key]实例){
//   // ....
// }      
})
当我尝试检查
记录[键]
实例时,我得到以下编译器错误:

元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“MainRecord”。在“MainRecord”类型上找不到具有“string”类型参数的索引签名。


有什么想法吗?

TypeScript编译器向
record[key]
抱怨
key
的类型是
字符串,而不是主记录的
KeyofMainRecord
,这可能是因为lodash
keys()
方法的键入不精确,可能与
Object.keys()
的键入一样

您应该使用类型断言来解决此问题:

_.keys(record).map(k => {
  const key = k as keyof MainRecord;
  // if (record[key] instanceof Array) {
  //   // ....
  // }      
})

如果您发布了
MainRecord
的类型定义,可能会有助于找到答案。实际上,我对这个问题的解决方案采取了完全不同的方向,但这里提供的答案是正确的(TS编译)。我猜我在定义
record
时,假设
MainRecord
的类型定义是隐含的。