Наследование машинописи в Angularjs 1.x

Пытаюсь сделать сервис абстрактного класса с методами и свойствами, которые другие сервисы могут наследовать n Angularjs. Использование метода машинописания расширений не будет работать или не будет, если я делаю это правильно, поэтому попытался использовать этот шаблон, но, к сожалению, он тоже не работал. 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

1 ответ

Решение

Ваш вопрос не так ясен, даже с комментарием, который вы ответили на мой вопрос, я все еще не уверен, в чем проблема.

Я не угловой разработчик, поэтому я не могу ответить на конкретные угловые вопросы, но, как наследование идет в машинописи, вот как вы это делаете:

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 игровой площадки слишком длинный для комментариев, вот он.

Другие вопросы по тегам