Что это значит, когда класс реализует себя в Typescript - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь добавить внедрение зависимостей в простой проект Typescript, обнаружил пакет npm, называемый inversify.Итак, глядя на примеры, я наткнулся на этот код:

import { Container, injectable, inject } from "inversify";

@injectable()
class Katana {
    public hit() {
        return "cut!";
    }
}

@injectable()
class Shuriken {
    public throw() {
        return "hit!";
    }
}

@injectable()
class Ninja implements Ninja {

    private _katana: Katana;
    private _shuriken: Shuriken;

    public constructor(katana: Katana, shuriken: Shuriken) {
        this._katana = katana;
        this._shuriken = shuriken;
    }

    public fight() { return this._katana.hit(); };
    public sneak() { return this._shuriken.throw(); };

}

var container = new Container();
container.bind<Ninja>(Ninja).to(Ninja);
container.bind<Katana>(Katana).to(Katana);
container.bind<Shuriken>(Shuriken).to(Shuriken);

Что означает, что класс Ninja реализует класс Ninja?

class Ninja implements Ninja {

В примере контейнер связываеткласс сам по себе, это связано с этим?

var container = new Container();
container.bind<Ninja>(Ninja).to(Ninja);

1 Ответ

0 голосов
/ 22 января 2019

Я не думаю, что это имеет какое-либо значение или добавляет безопасность типа. Это просто причуды того, как компилятор выполняет проверку типов. Орудия проверяются после того, как класс уже полностью напечатан. Таким образом, компилятор может проверить предложение implements, которое включает сам класс.

В этом случае не очень полезно использовать класс в предложении implements (поскольку вы в основном говорите, что класс должен реализовывать себя, что он всегда делает). Мы можем использовать эту функцию, чтобы делать полезные вещи, например, мы можем гарантировать, что члены класса имеют определенный тип

class Test implements Record<keyof Test, () => void> {
  test() { } 
}

class Test2 implements Record<keyof Test2, () => void>{
    test(a: number) { }  // error
}
...