我尝试按照以下官方指南编写自定义rxjs过滤器:
<?php
namespace api\modules\v1\controllers;
use yii\rest\Controller;
class BasicController extends Controller {
public function actionTest() {
return "oho";
}
}
然而,在'T'类型中不存在'TS2339:属性'数据'。'
我通过使用'any'找到了解决方法:
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(); }
});
});
然而,寻找'myFilter'将理解'数据'对象的解决方案,因此可以使用点符号来访问x对象,而无需使用TypeScript错误和“任何”解决方法。
答案 0 :(得分:2)
您需要使用Typescript的Generic Constraints功能。他们在文档中有一个非常相似的例子。
您需要使用界面。例如:
interface HasDataProp {
data: DataType;
}
然后您需要在T
上添加约束以限制允许使用的类型:
const myFilter = (key: string) => <T extends HasDataProp>(source: Observable<T>) =>