Могут ли декораторы классов машинописи быть необязательными при создании экземпляра? - PullRequest
0 голосов
/ 29 августа 2018

Согласно википедии , шаблон декоратора позволяет вам украшать экземпляр класса дополнительной функциональностью, например:

let ball = new BouncyBall(new Ball())

Экземпляр Ball украшен дополнительным кодом из класса BouncyBall. Я все еще могу получить обычный Ball:

let simpleOldBall = new Ball()

Теперь, когда я смотрю на документы для машинописи для Class Decorators , кажется, что все Ball экземпляры будут автоматически украшены кодом bouncyBall:

@bouncyBall
class Ball {
}

Как создать шарики и надувные шарики при использовании Class Decorators в Typescript?

1 Ответ

0 голосов
/ 29 августа 2018

Декоратор класса объявляется перед объявлением класса и поэтому применяется ко всем экземплярам этого класса.

В вашем случае вы можете посмотреть mixins . Это позволило бы что-то вроде этого:

type Constructor<T> = new(...args: any[]) => T;

function Bouncy<T extends Constructor<{}>>(Base: T) {
    return class extends Base {
        bounce() {
            console.log('Bounce!');
        }
    }
}

class Ball {
}

const BouncyBall = Bouncy(Ball);

const bouncyBall = new BouncyBall();
bouncyBall.bounce();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...