FileInformation
是一个具有字符串属性path
的类。我试图将其作为类型传递给方法getValue<T>()
,然后从返回的对象中获取我的属性。我的问题是该函数不知道什么是T
,因此无法实例化它。有没有一种方法可以根据调用者方法创建T
的新实例?
呼叫者
This.getValue<FileInformation>().subscribe((value) => {
console.log(v.data); // object is returned
console.log(v.data.path); // always undefined
})
方法
private value: Subject<ISignalRHub<any>> = new Subject<ISignalRHub<any>>();
public getValue<T>() {
this.value = new Subject<SignalRHub<T>>();
this.hubConnection.on(CRUD.create, (data: T) => {
this.value.next({ method: CRUD.update, data: data });
});
const val = new Subject<ISignalRHub<T>>();
this.value.subscribe((v: ISignalRHub<T>) => {
val.next(v);
});
return val.asObservable();
}
更新
这是值和嵌套对象的输出
console.log(v);
console.log(v.data);
console.log(v.data.path);
更新
基于下面的评论,我的问题是JSON解析器,该序列化了Pascal情况下的所有属性。感谢@Antoniossss指出了这一点。
答案 0 :(得分:1)
This.getValue<FileInformation>().subscribe((value) => {
console.log(v.data); // object is returned
console.log(v.data.path); // always undefined
})
好吧,这里的值永远不会是FileInformation
类型,并且它将始终是纯JS对象。此处使用的类型仅用于使用控制(检测对不存在的属性的访问)。这对于接口非常有效-因为对象可能与接口签名匹配。对于课堂实例,您必须自己创建那些人
This.getValue()
.pipe(
map(jsonData=>new FileInformation(jsonData)
).subscribe((value:FileInformation) => // here value will be indeed a FileInformation instance
})
很显然,您必须创建constructor
才能使此示例正常工作,它将json映射到您的FileInformation
中。