Как я могу добавить метод расширения в существующий класс - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу добавить расширение метода в существующий класс, но не знаю как. Я попробовал это:

enter image description here

Но я всегда получаю Property 'addAssembler' doesnt exist on type 'Container' ошибку.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы можете просто расширить члены класса, определив интерфейс с тем же именем и добавив в него новые методы:

foo2.ts:

class Foo {
    spam?: string;
    bar() {
        console.log('Foo#bar');
    }
}

app.ts:

import { Foo } from './foo2';

declare module './foo2' {
    interface Foo {
        foo(): void;
    }
}

Foo.prototype.foo = function(this: Foo) {
    console.log('Foo#foo', this.spam);
}

const f = new Foo();
f.spam = 'eggs';
f.bar();
f.foo();
0 голосов
/ 27 апреля 2018

Вам нужно объявить расширение модуля:

declare module 'inversify' {
    export interface Container {
        addAssembler(): void
    }
}

Вы можете добавить объявление выше в ваш файл ts, где вы добавляете метод к прототипу Container.

Редактировать

К сожалению, определение Container предотвращает увеличение. Мы можем объединять классы из модулей с интерфейсами, но они должны быть определены как export class Container {}. В этом случае контейнер экспортируется как class Container {} export { Container }. Это предотвращает увеличение, к сожалению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...