[英]Array of Generic Type not showing property
我想念一些東西。 這太簡單了,不能給我帶來麻煩。
實體
export class Entity {
id: number;
}
搜索欄
import { Entity } from './../resources/entity';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
@Injectable()
export abstract class SearchServiceBase<T extends Entity> {
public GetAll(): Observable<T[]> {
const values: T[] = [
{ id : 1 } <-- ERROR Can't assign to type T
];
return of(values);
}
}
您不知道{id: 1}
是類型T
的有效值。 約束T extends Entity
意味着T
可以是調用SearchServiceBase
的構造函數的代碼選擇的Entity
任何子類型。 在GetAll()
的實現內部,您不完全知道T
是什么。
例如,將您的代碼更改為以下最小的可重現示例 (我刪除了對angular的依賴,因為這大概不是您的問題):
class Entity {
id: number = 0;
}
class SearchServiceBase<T extends Entity> {
public GetAll() {
const values: T[] = [
{ id: 1 } //<-- ERROR Can't assign to type T
];
}
}
考慮以下代碼會發生什么:
class Hmm extends Entity {
readonly hmm = "hmmmmmm";
}
const hmmSearch = new SearchServiceBase<Hmm>();
hmmSearch.GetAll(); // 🤔
運行hmmSearch.GetAll()
會發生什么? 好吧,這相當於:
class HmmSearchServiceBase {
public GetAll() {
const values: Hmm[] = [
{ id: 1 } //<-- ERROR Property 'hmm' is missing
];
}
}
如您所見, {id: 1}
不是有效的Hmm
。 因此,編譯器在您的原始代碼中發出錯誤是正確的。
現在,我不確定如何修復此代碼以使其正常工作,因為我對angular或rxjs不夠了解,無法弄清楚您要做什么。 通常很難將具體類型的值分配給通用類型的變量,因為很難保證具體類型可分配給通用類型的每個可能實例。 如果要使用通用類型T
的值,則可能必須在某個地方將其傳遞給函數或類構造函數。
哦,希望對您有所幫助。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.