Что это значит, когда класс реализует себя в Typescript
Я пытаюсь добавить внедрение зависимостей в простой проект 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);
Что значит для класса ниндзя реализовать класс ниндзя?
class Ninja implements Ninja {
В примере контейнер связывает класс с самим собой, это связано с этим?
var container = new Container();
container.bind<Ninja>(Ninja).to(Ninja);
1 ответ
Я не думаю, что это имеет какое-то значение или добавляет безопасность типа. Это просто причуды того, как компилятор выполняет проверку типов. Орудия проверяются после того, как класс уже полностью напечатан. Таким образом, компилятор может проверить implements
пункт, который включает в себя сам класс.
В этом случае не очень полезно использовать класс в implements
предложение (как вы в основном говорите, класс должен реализовывать себя, что он всегда делает). Мы можем использовать эту функцию, чтобы делать полезные вещи, например, мы можем гарантировать, что члены класса имеют определенный тип
class Test implements Record<keyof Test, () => void> {
test() { }
}
class Test2 implements Record<keyof Test2, () => void>{
test(a: number) { } // error
}