簡體   English   中英

TypeScript 泛型:擴展提供的接口

[英]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.

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