繁体   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