我对类型记录很陌生,在尝试实现类中的接口时遇到了以下问题:
interface TestInterface {
x: number
}
class Test implements TestInterface {
constructor() {
this.x = 0
}
}
// Class 'Test' incorrectly implements interface 'TestInterface'.
// Property 'x' is missing in type 'Test' but required in type 'TestInterface'.
但是,如果我在x: number
之前将Test
添加到constructor
中,它就能工作。因此,如果您想检查在constructor
中初始化的属性的类型,就必须在类本身上指定它。那么implement
和interface
是干什么用的呢?如果我想使用这个接口来检查它的实例的类型,它不是重复的吗,因为我必须在两个地方编写它?
发布于 2021-08-17 01:05:42
构造函数中的代码不能由类型记录检查以确定类是否正确地实现了接口。打字本不可能检查代码中的所有赋值,以确保类型是正确的,因此需要静态声明类型。interface
和implements
的目的不是减少您必须编写的代码量,而是声明代码中的对象类型,以便类型记录可以静态地检查代码是否与类型相一致。
通过说类实现了接口,您就可以有效地要求类型记录保持诚实,并检查类型是否确实一致。如果类型抄本仅仅相信您会在构造函数中做正确的事情,那么它就不会非常有效!请注意,构造函数可能包含条件逻辑、循环和其他代码,这意味着,即使在原则上,类型记录也不可能分析构造函数代码以确定是否保留了与implements
的约定。
https://stackoverflow.com/questions/68810489
复制相似问题