簡體   English   中英

如何在打字稿中的方法中實例化泛型T?

[英]How to instantiate a generic T in a method in typescript?

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);

在此處輸入圖片說明

更新

基於下面的評論,我的問題是在Pascal情況下序列化所有屬性的JSON解析器。 感謝@Antoniossss指出這一點。

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 ,該constructor會將json映射到您的FileInformation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM