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