繁体   English   中英

如何在TypeScript中明确定义类型并在函数签名中使用它

[英]how to explicitly defining the type in TypeScript and use it in function signatures etc

我尝试按照以下官方指南编写自定义rxjs过滤器:

const myFilter = (key: string) => <T>(source: Observable<T>) =>
  new Observable<T>(observer => {
    return source.subscribe({
      next(x) {
          x = x.data.values.find(item: => item.description === key);
          observer.next(x);
      },
      error(err) { observer.error(err); },
      complete() { observer.complete(); }
    });
  });

但是,获取'TS2339:类型'T'不存在属性'data'。

我已经找到解决方法,可以使用“ any”:

const newObj: any = x;
x = newObj.data.values.find((item: any) => item.description === key);

但是,寻找“ myFilter”将理解“ data”对象的解决方案,以便可以使用点符号来访问x对象,而不会出现TypeScript错误和“ any”变通办法。

您需要使用Typescript的Generic Constraints功能。 他们在文档中有一个非常相似的示例。

您需要一个接口才能使用。 例如:

interface HasDataProp {
    data: DataType;
}

然后,您需要在T上添加约束以限制允许使用的类型:

const myFilter = (key: string) => <T extends HasDataProp>(source: Observable<T>) =>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM