2016-07-14 17 views
0

私は自分のクラスにカスタムアクション(コピー)を追加するdataAccessServiceクラスを持っています。 typesScriptが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); 
} 
関連する問題