2016-07-14 46 views
0

我有一個dataAccessService類,我想添加一個自定義操作(複製)到我的班級。我怎樣才能添加這樣的打字稿可以調用dataAccessService.copy()?我看着Extending $resource of angularjs using IResourceClass of typescript,但其使用的工廠,我想用一個服務

module rebateMaintenance.common { 

interface IDataAccessService { 
    getRebateResource(): ng.resource.IResourceClass<IRebateResource> ; 
} 

interface IRebateResource 
    extends ng.resource.IResource<rebateMaintenance.domain.IRebate>{ 
} 

export class DataAcessService 
    implements IDataAccessService { 

    static $inject = ["$resource"]; 
    constructor(private $resource: ng.resource.IResourceService) { 

    } 

    getRebateResource(): ng.resource.IResourceClass<IRebateResource> { 
     return this.$resource("http://localhost:48679/api/rebate/:id", null, 
      { 
       copy: { method: 'POST', url: "http://localhost:48679/copyrebate/:id"} 
      } 
     ); 
    } 

} 
angular.module("common.services") 
    .service("dataAccessService", 
    DataAcessService); 
} 

回答

0

它看起來像我得到了它。關鍵是在從getCopyRebateResource方法返回時轉換爲接口類型

module rebateMaintenance.common { 

interface IDataAccessService { 
    getRebateResource(): ng.resource.IResourceClass<IRebateResource>; 
    getCopyRebateResource(): ICopyRebateResourceClass; 
} 

interface IRebateResource 
    extends ng.resource.IResource<rebateMaintenance.domain.IRebate> { 
} 

interface ICopyRebateResource 
    extends ng.resource.IResource<domain.ICopyRebate> { 
} 

interface ICopyRebateResourceClass 
    extends ng.resource.IResourceClass<any> { 
    copy(params: Object, success?: Function, error?: Function): domain.ICopyRebate; 
} 

export class DataAcessService 
    implements IDataAccessService { 

    static $inject = ["$resource"]; 
    constructor(private $resource: ng.resource.IResourceService) { 

    } 

    getRebateResource(): ng.resource.IResourceClass<IRebateResource> { 
     return this.$resource("http://localhost:48679/api/rebate/:id", null, 
      { 
       'update': { method: 'PUT' } 
      } 
     ); 
    } 

    getCopyRebateResource() { 
     return  <ICopyRebateResourceClass>this.$resource("http://localhost:48679/copyrebate/:id", null, 
      { 
       copy: { method: 'POST' } 
      } 
     ) 
    } 
} 
angular.module("common.services") 
    .service("dataAccessService", 
    DataAcessService); 
}