class 在 Typescript 中实现自身是什么意思

What does it mean when a class implements itself in Typescript

我正在尝试将依赖注入添加到一个普通的 Typescript 项目中,发现了一个名为 inversify 的 npm 包。 所以看看我遇到这段代码的例子:

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 实施 class Ninja 意味着什么?

class Ninja implements Ninja {

在示例中,容器将 class 绑定到自身,是否与此相关?

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

我认为这没有任何意义或增加任何类型安全性。这只是编译器如何执行类型检查的一个怪癖。在 class 已经完全输入后检查工具。因此编译器可以检查涉及 class 本身的 implements 子句。

在这种情况下,在 implements 子句中使用 class 并不是特别有用(因为您基本上是在说 class 应该实现它自己,它总是这样做)。我们可以使用此功能做一些有用的事情,例如我们可以确保 class 成员属于特定类型

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

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