【问题标题】:Object is of type 'unknown'对象的类型为“未知”
【发布时间】:2022-01-21 19:13:44
【问题描述】:

我有简单的 Rxjs 函数 Observables 和 Operators 来返回新的 Observable。在我的代码中,我正在使用链接在管道内的过滤器和映射运算符,遗憾的是,我收到错误 TS2571: Object is of type 'unknown'。内部过滤器操作员数据 代码如下:

import { filter, map, Observable } from 'rxjs'

@Component({
  selector: 'app-observable-operator',
  templateUrl: './observable-operator.component.html',
  styleUrls: ['./observable-operator.component.css']
})
export class ObservableOperatorComponent{

  title:string='Angular Observable using Observable Operators';

  ob=new Observable((observer:any)=>{
    console.log("Observable Starts");
    observer.next(1)
    observer.next(2)
    observer.next(3)
    observer.next(4)
    observer.next(5)
    observer.complete()
  }).pipe(filter(data=>
    data > 2), //Error inside filter operator (parameter) data:unknown
    map((val)=>{return val as number*2}),

  )

}


【问题讨论】:

  • 管道(过滤器((数据:数字)=>数据> 2)
  • 我很确定您可以简单地定义 ob=new Observable<number>(...) 并且没有 anys 和 unknowns 其他一切都会到位

标签: javascript angular typescript rxjs rxjs-observables


【解决方案1】:

我相信您需要在参数中添加类型

filter((data: any) => data > 2)

【讨论】:

  • 是的!它的工作原理非常感谢你
  • 哎呀!随意点击点下的复选标记按钮将其标记为答案,我会得到额外的 :)
【解决方案2】:

解决这个问题的方法是定义observer权限的类型。

传递给Observable 的构造函数的函数中的observer 参数是Observer<number> 类型,因为它通知数字。如果这样做,Typescript 可以将data 的类型推断为number

也就是说代码应该是这样的

ob=new Observable((observer: Observer<number>)=>{
  console.log("Observable Starts");
  observer.next(1)
  observer.next(2)
  observer.next(3)
  observer.next(4)
  observer.next(5)
  observer.complete()
}).pipe(filter(data=>
  data > 2), //Error inside filter operator (parameter) data:unknown
  map((val)=>{return val as number*2}),

)

【讨论】:

    猜你喜欢
    • 2021-07-13
    • 2021-06-19
    • 1970-01-01
    • 2020-08-23
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2022-01-25
    相关资源
    最近更新 更多