typescript - 迭代对象的通用属性,验证它是对象的属性而不是任何字符串(我从编译器收到错误)

标签 typescript types compiler-errors

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'。在“未知”类型上找不到带有“字符串”类型参数的索引签名。
但是objectWithPropertiesAndValuesPartial<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/

相关文章:

go - 我尝试测试用Go语言编写的代码,但始终收到此错误,并且不知道为什么

typescript - typescript 中独立泛型类型的数组

javascript - Node.js 中的 declare var 是什么?

oracle - 如何在 Oracle 数据库中将列的数据类型从 varchar2 更改为数字

postgresql - 如何使用 rowtype 数组作为 Java 参数调用 PostgreSQL 函数

c# - 为什么抛出或捕获的类型必须派生自 System.Exception

css - Angular 2-Jquery |使用鼠标位置添加样式(顶部/左侧)

javascript - 在 Typescript 中向其添加函数之前,如何将变量声明为空对象?

types - ocaml 记录类型和 null

typescript - 为什么我会收到一些 Ionic 组件引用一个值但被用作类型的错误?