valuesOrCondition$<T>(objects: Observable<T[]>, objectWithPropertiesAndValues: Partial<T>) {
const properties = Object.keys(objectWithPropertiesAndValues);
return objects.pipe(
map(nodes => nodes.filter(node =>
properties.find(ppName =>
node[ppName] === objectWithPropertiesAndValues[ppName]))),
);
}
当我执行此代码时,TypeScript 给了我这个错误:元素隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型 'unknown'。在“未知”类型上找不到带有“字符串”类型参数的索引签名。
但是
objectWithPropertiesAndValues
是 Partial<T>
这意味着永远存在于 node
这是 T
.我明白这个问题,我知道我可以简单地添加
any
它会起作用。但我想在这里尊重 Typescript 的方式。
最佳答案
Typescript 有时需要开发人员确定,这就是为什么你有时使用 .?
或 !.
在这种情况下,您需要指定结果为 [keyof Partial<T>]
或 [keyof T]
.为了保持一致性,请使用第一个。
替换这一行:
const properties = Object.keys(objectWithPropertiesAndValues);
对于这个:const properties = Object.keys(objectWithPropertiesAndValues) as [keyof Partial<T>];
关于typescript - 迭代对象的通用属性,验证它是对象的属性而不是任何字符串(我从编译器收到错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68951220/