typescript - 迭代对象的通用属性,验证它是对象的属性而不是任何字符串(我收到来自编译器的错误)
问题描述
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 给了我这个错误:
元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“未知”。在“未知”类型上找不到具有“字符串”类型参数的索引签名。
但是objectWithPropertiesAndValues
isPartial<T>
这意味着永远将存在于node
哪个 is 上T
。
我理解这个问题,我知道我可以简单地添加any
它并且它会起作用。但我想在这里尊重打字稿的方式。
解决方案
Typescript 有时需要开发人员确定,这就是您有时使用的原因,.?
或者!.
在这种情况下您需要指定结果是[keyof Partial<T>]
or [keyof T]
。只是为了保持一致性,请使用第一个。
替换这一行:
const properties = Object.keys(objectWithPropertiesAndValues);
对于这个:
const properties = Object.keys(objectWithPropertiesAndValues) as [keyof Partial<T>];
推荐阅读
- wso2 - 无法从 Wso2 IS 中删除用户
- android - API 26 上的通知灯闪烁率
- apache-poi - 读取excel文件数据时出现空指针异常
- nlp - NLP:doc2vec / word2vec 中的预处理
- supertest - 是否可以使用查询键参数作为变量?
- javascript - 使用 JSON 和 AJAX 从数据库中提取信息
- npm - VS Code 终端无法使用来自 nvm 的 npm 版本
- python - 为什么不应该在 python 中动态生成变量名?
- acumatica - 更改默认字段的标签名称
- python - 为什么 tkinter 不更新完成百分比?