我试图创建一个抽象类服务,其方法和属性可供其他服务在 Angularjs 中继承。使用 typescript 扩展方法将不起作用,或者如果做得正确的话我不会,所以尝试使用这种模式,但遗憾的是它也不起作用。 Typescript 不知道原型(prototype)继承中继承的方法。他们有任何解决方法或解决方案吗,谢谢您的帮助
抽象服务类的示例代码
'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
最佳答案
您的问题不太清楚,即使您回答了我的问题,我仍然不确定问题是什么。
我不是 Angular 开发人员,所以我无法回答 Angular 特定的问题,但随着继承进入 typescript ,这就是你的做法:
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);
}
如果您告诉我这有什么问题,那么我也许可以帮助您解决这个问题。
<小时/>编辑
由于 Playground 网址对于评论来说太长,here it is .
关于javascript - Angularjs 1.x 中的 Typescript 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142477/