如何为组件的服务创建联合类型?



我有一个调用服务方法的组件。该组件是一个基本组件,因此子组件使用super()提供服务,如下所示:

export class ParentComponent {
constructor(protected myService: ServiceOne | ServiceTwo | ServiceThree | any) {
}
register(formData) {
let response = await this.myService.register(formData);
}
}
export class ChildComponent extends ParentComponent {
constructor(protected serviceOne: ServiceOne) {
super(serviceOne);
}
}

每个服务(ServiceOneServiceTwoServiceThree(都使用共享的register()方法从相同的基本服务扩展。

@Injectable()
export class ServiceOne extends BaseService {
register(user) {
return this.post('url', user);
}
}
export class BaseService {
protected post(url, data) {
return this.http.post(url, data);
}
}

只要我在ParentComponent中包含any,所有这些都可以正常工作。但当我从并集类型中删除any时,我得到:

Cannot invoke an expression whose type lacks a call signature. Type ‘(user => Promise<any>) | (user => Promise<any>) | (user => Promise<any>)’ has no compatible call signature.

有没有一种干净的方法可以做到这一点而不必求助于any

因此,正如@DeborahK所建议的,接口是可行的。

这是接口和更新的构造函数。(根据需要更新Promise<>包装器(。

interface DynamicService {
register: (service) => (Promise<ServiceOne | ServiceTwo | ServiceThree>);
}
export class ParentComponent {
constructor(protected myService: DynamicService) {
}
register(formData) {
let response = await this.myService.register(formData);
}
}
export class ChildComponent extends ParentComponent {
constructor(protected serviceOne: ServiceOne) {
super(serviceOne);
}
}

相关内容

  • 没有找到相关文章

最新更新