我有一个接口,在该接口中有一个名为data
的属性,它是一个数组。所以看起来像这样:
type Data = { prop1: string; prop2: string }[];
interface MyInterface {
prop1: string;
data: Data;
}
字符串
现在我有一个RxJS流,
在这个流中,接口是MyInterface
。
现在我想在data属性中显示一些稍微不同的东西。
type DataExtended = Data & {
newValue: string
}
型
将该新类型添加到扩展接口
interface MyInterfaceExtended extends MyInterface {
data: DataExtended
}
型
现在,在控制器中,我调用了一个HTTP服务,该服务的预期结果是MyInterface
。但是我需要更改该数据结构,所以我有以下内容:
var myData$ = Observable<MyInterfaceExtended>;
constructor(private myService:myservice){
this.myData$ = this.myService.get().pipe((map(value)) => {
foreach(value.data, (data) =>{
data.newValue = 'new';
})
return value
})
}
型
但我一直得到错误说:
类型{etc}上不存在“newValue”
为什么会这样?
2条答案
按热度按时间e5nqia271#
假设:
假设
this.myService.get()
返回Observable<MyInterface>
。DataExtended
类型有一个问题,因为您将Data
({ prop1: string; prop2: string }
类型的数组)与对象{ newValue: string }
组合在一起时,合并。正确的类型应该是:
字符串
现有的类型。
或者你应该将
Data
定义为单个对象而不是数组类型。新增类型:
型
要使用
map
RxJS运算符转换数据,可以使用以下命令实现:现有类型的解决方案1:
型
新类型的解决方案2:
型
Demo @ StackBlitz
h5qlskok2#
这是如何创建泛型接口。
字符串
另一个例子
型