1

我正在创建一个扩展类HttpClient,然后将this关键字扩展为includeEventsIn函数,includeEventsIn将扩展BaseService和EventAggregator类型,请参阅代码here如何通过Typescript中的“this”关键字包含类定义?

问题

  • 我怎么能包括BaseServiceEventAggregator方法和道具与HttpClient的相处?
  • 什么是另一种扩展类(BaseService)与两个类的方法?

这是代码。

@transient() 
export class BaseService extends HttpClient { 
    constructor() { 
     super(); 
     includeEventsIn(this); 
    } 
} 
+1

你必须在'BaseClass'中注入'EventAggreator'。然而,我认为如果你在'BaseClass'中注入'HttpClient'和'EventAggregator',而不使用继承,那么它会更有意义。 –

+0

EventAggregator和HttpClient的方法和属性不能用于基类。我不想注入它,因为它需要手动实现它的所有属性和方法 – janmvtrinidad

回答

2

时建立应用程式奥里利亚除非绝对必要,你不应该使用继承(我会认为这是从来没有必要)。青睐继承。

例如,在你的情况,我会Service(不BaseService,因为你将不再使用继承)承担HttpClientEventAggregator的依赖。我怀疑你真的需要通过致电includeEventsIn增加的所有功能。这就是说,如果你确实需要它,那么你可以简单地将这三个函数添加到Service

import {inject, EventAggregator} from 'aurelia-framework'; 
import {HttpClient} from 'aurelia-fetch-client'; 

@inject(HttpClient, EventAggregator) 
export class Service { 
    constructor(http, ea) { 
    this.http = http; 
    this.ea = ea; 
    } 
} 

然后,您可以在实现所需的任何功能后,根据需要将此类注入到另一个类中。

+0

它是有道理的。但是为了这个问题,在使用includeEventsIn时,typecript是否可以通过这个关键字来扩展类定义(道具和方法)? – janmvtrinidad

+0

我会看看创建一个装饰器来做到这一点。 'includeEventsIn'是一种混合类型的东西。 –

+0

我同意你Ashley Saiyaman! –