[英]TypeScript Generics: Extending a Provided Interface
我想對 Angular 服務使用泛型,以便人們可以傳入他們想要的任何接口/類/類型的數組,但我希望傳入的類型擴展服務提供的接口。 寫起來很混亂,但這是目前為止服務的樣子:
export interface ProvidedInterface {
stepId: number;
parentId: number;
}
@Injectable()
export class ManagerService {
private myModelBs: BehaviorSubject<Array<Array<T extends ProvidedInterface>>> = new BehaviorSubject<Array<Array<T extends ProvidedInterface>>>(null);
constructor() {}
}
因此BehaviorSubject
將包含一個多維數組,其中數組中的每個元素都是一個擴展了ProvidedInterface
的泛型類型的數組。 不幸的是,這似乎不起作用。 VS Code 用紅色波浪線在T
下划線,表示找不到名稱“T”,以及嵌套Array
類型聲明后的第一個>
(連續三個;第一個是我指的to) 也帶有下划線並表示“?預期”。
也許我這樣做不正確,但我的想法是為了使此服務可重用,我可以使用擴展此提供的接口的泛型,然后該服務不會依賴於提供的接口中的字段以外的任何其他字段。
希望我嘗試做的事情有意義,但我不確定為什么 VS Code 首先不喜歡T
作為泛型; 據我所知,即使其余部分不起作用,它也至少應該起作用。
這就是最終為我工作的原因:
export interface ProvidedInterface {
stepId: number;
parentId: number;
}
@Injectable()
export class ManagerService<T extends ProvidedInterface> {
private myModelBs: BehaviorSubject<Array<Array<T>>> = new BehaviorSubject<Array<Array<T>>>(null);
constructor() {}
}
請注意,類型聲明現在位於服務名稱ManagerService
。 然后在BehaviorSubject
的類型聲明中,該類型所需要的只是T
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.