Javascript typescript运行时数组类型.map方法可用
我有以下代码:Javascript typescript运行时数组类型.map方法可用,javascript,arrays,types,typescript,Javascript,Arrays,Types,Typescript,我有以下代码: if (Array.isArray(value.items)) { return Array.prototype.concat.apply(items, value.items.map(function(item, key) { return traverseCallback(item, path.concat(['items', key]), resolve); })); } 这在value.items.map上引发了一个错误。错误是: P
if (Array.isArray(value.items)) {
return Array.prototype.concat.apply(items, value.items.map(function(item, key) {
return traverseCallback(item, path.concat(['items', key]), resolve);
}));
}
这在value.items.map
上引发了一个错误。错误是:
Property 'map' does not exist on type 'IObjectSchema | IObjectSchema[]'.
问题是-我要么处理IObjectSchema
元素,要么处理此类元素的数组。当我进入Array.isArray…
时,我100%确定我有一个数组,因此我有了数组上可用的.map
函数。这是显而易见的
然而,TypeScript似乎不相信它有可用的.map
,可能它不识别Array.isArray…
调用一级
问题是-如何将变量当作类型化元素或类型化元素数组使用,并允许使用.map作为数组?我确信我的代码是JS正确的,但是TS在这里抛出了错误。编译器关于在类型
IObjectSchema | IObjectSchema[]
上没有map
方法是正确的,因此您需要告诉它,在if
之后,可以安全地假设您正在处理IObjectSchema[]
您有两个选择:
(1) 铸造
(2) 使用
看起来您所做的与我的第二个解决方案类似,但是编译器在使用Array.isArray
只能使用
typeof
或instanceof
如果仍要使用Array.isArray
,也可以创建自己的类型保护:
function isObjectSchemaArray(items: IObjectSchema | IObjectSchema[]): items is IObjectSchema[] {
return Array.isArray(items);
}
然后:
if (isObjectSchemaArray(value.items)) { ... }
编译器没有在类型
IObjectSchema | IObjectSchema[]
上使用map
方法是正确的,因此您需要告诉它,在if
之后,可以安全地假设您正在处理IObjectSchema[]
您有两个选择:
(1) 铸造
(2) 使用
看起来您所做的与我的第二个解决方案类似,但是编译器在使用Array.isArray
只能使用
typeof
或instanceof
如果仍要使用Array.isArray
,也可以创建自己的类型保护:
function isObjectSchemaArray(items: IObjectSchema | IObjectSchema[]): items is IObjectSchema[] {
return Array.isArray(items);
}
然后:
if (isObjectSchemaArray(value.items)) { ... }
我使用了第二种方法
if(数组的value.items实例){
但它仍然返回相同的错误,不知道为什么。对虚线属性使用类型保护是正确的。尝试使用我提供的isObjectSchemaArray
方法我使用了第二种方法if(数组的value.items实例){
它仍然返回相同的错误,不知道为什么。在虚线属性上使用类型保护是正确的。请尝试使用我提供的isObjectSchemaArray
方法