0

我正在尝试使用其他服务可以继承 n Angularjs 的方法和属性来创建一个抽象类服务。使用 typescripts 扩展方法将不起作用,或者如果做得正确我不会,所以尝试使用这种模式,但遗憾的是它也不起作用。Typescript 不知道从原型继承中继承的方法。他们是否有任何解决方法或解决方案,谢谢您的帮助

抽象服务类的示例代码

'use strict';

namespace Data {
export interface IAbstractRepository {
    sayHellow(): string;
}

class AbstractRepository implements IAbstractRepository{  
    static extend = function (repoCtor): void {
        repoCtor.prototype = new AbstractRepository();
        repoCtor.prototype.constructor = repoCtor;
    };
    sayHellow(): string {
        return 'Hello world';
    }
}
function factory(): IAbstractRepository {
    return AbstractRepository;
}
angular.module('core').factory('AbstractRepository', factory);
}

对于子服务类

'use strict';

namespace Data{
class BookRepository {
    constructor(AbstractRepository) {
         AbstractRepository.extend(this);
    }

    getAllBooks(): string {
     // this shows as an error now it cant know that its inherited 
        return this.sayHellow();
    }
}
factory.$inject = ['AbstractRepository'];
function factory(AbstractRepository): any {
    return new BookRepository(AbstractRepository);
}
angular.module('core').factory('BookRepository', factory);
}

对于为 JshintRC 提出的解决方案,以抑制 Typescript 产生的警告 "validthis": true 和 "shadow": "false

4

1 回答 1

2

你的问题不是很清楚,即使你回答了我的问题的评论我仍然不确定问题是什么。

我不是角度开发人员,所以我无法回答角度特定的问题,但是随着打字稿中的继承,这就是你的做法:

namespace Data {
    export interface IAbstractRepository {
        sayHellow(): string;
    }

    abstract class AbstractRepository implements IAbstractRepository {
        constructor() {}
        
        sayHellow(): string {
            return 'Hello world';
        }
    }

    
    class BookRepository extends AbstractRepository {
        constructor() {
            super();
        }

        getAllBooks(): string {
            return this.sayHellow();
        }
    }
    
    angular.module("core").factory("BookRepository", BookRepository);
}

如果你能告诉我这有什么问题,那么我也许可以帮你解决这个问题。


编辑

由于操场 url 对于评论来说太长了,这里是.

于 2016-05-10T15:47:41.997 回答