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
}
我正在尝试将依赖注入添加到一个普通的 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
}