Seu*_*uga 3 javascript typescript dependency-inversion
我们可以实现一个接口到es6类的方式非常简单:
interface IDog {
bark(): void
}
class Dog implements IDog {
bark(): void {
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:如何为这个"类"实现相同的接口:
const Dog = function() {
}
Dog.prototype.bark = function() {
}
Run Code Online (Sandbox Code Playgroud)
我尝试将狗的类型定义为IDog : const Dog: IDog. 没工作.
所以,我需要它来实现依赖倒置,我无法弄清楚如何使用es5类来做到这一点.我看到经典继承风格是Javascript中的"反模式",所以我决定以旧方式创建类,并需要帮助实现Typescript接口.
我假设您需要es5样式的类实现,它被声明为符合IDog接口,并由编译器进行类型检查以确保它真正符合该接口.
坏消息 - TypeScript不支持.您可以让TypeScript认为es5 Dog是一个实现的类IDog,但您必须声明DogConstructor接口并使用as any as DogConstructor类型断言Dog.并且您无法使TypeScript成为基于原型的实现,因为Object.prototype(以及随后Dog.prototype)any在系统库中声明(请参阅以下 问题进行讨论):
interface IDog {
bark(): void
}
interface DogConstructor {
new(): IDog;
}
const Dog = function (this: IDog) {
// this.bark(); you can do this because of `this: IDog` annotation
} as any as DogConstructor;
Dog.prototype.bark = function() {
}
const p = new Dog();
p.bark();
Run Code Online (Sandbox Code Playgroud)
我认为对此的支持不会得到改善.Es5风格的类通常用javascript代码实现,这并不意味着要进行类型检查,TypeScript为编写类型声明提供了足够的支持,允许以类型安全的方式使用javascript实现.如果要在TypeScript中实现类,则可以简单地使用实际类.
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |