【问题标题】:Typescript, $resource and custom descriptor打字稿、$resource 和自定义描述符
【发布时间】:2016-11-17 21:27:45
【问题描述】:

我有一个 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);
}

【问题讨论】:

    标签: angularjs typescript


    【解决方案1】:

    看来我明白了。关键是从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);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2016-06-11
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多