从结构上比较typescript对象类型
从结构上比较对象类型。例如,在代码中 下面的片段,类“CPoint”与接口“Point”匹配,因为 “CPoint”具有“Point”的所有必需成员。一个班级可以 (可选)声明它实现了一个接口,以便 编译器将检查声明的结构兼容性。这个 示例还说明了对象类型可以与该类型匹配 从对象文字推断,只要对象文字 提供所有必需的成员 在他们的例子中,从结构上比较typescript对象类型,typescript,Typescript,从结构上比较对象类型。例如,在代码中 下面的片段,类“CPoint”与接口“Point”匹配,因为 “CPoint”具有“Point”的所有必需成员。一个班级可以 (可选)声明它实现了一个接口,以便 编译器将检查声明的结构兼容性。这个 示例还说明了对象类型可以与该类型匹配 从对象文字推断,只要对象文字 提供所有必需的成员 在他们的例子中,CPoint被认为是点类型,因为它是点类型,我可以在点的任何地方传递它。如果Point声明所有实现者都有方法Foo(x:string),CPoint就不会有该方
CPoint
被认为是点
类型,因为它是点
类型,我可以在点
的任何地方传递它。如果Point
声明所有实现者都有方法Foo(x:string)
,CPoint
就不会有该方法。因此,任何接受点
并希望使用Foo
的人,如果将CPoint
传递给它,都会爆炸
我的问题是,我是否理解错了,如果不是,为什么这被认为是一个足够好的语言规范?
若Point声明所有的实现者都有方法Foo(x:string),CPoint就不会有那个方法。因此,任何接受一个点并希望使用Foo的人,如果将CPoint传递给它,都会崩溃
如果这样做,您将得到一个编译时错误,CPoint
缺少Foo
方法。我建议在打字练习场上试试
若Point声明所有的实现者都有方法Foo(x:string),CPoint就不会有那个方法。因此,任何接受一个点并希望使用Foo的人,如果将CPoint传递给它,都会崩溃
如果这样做,您将得到一个编译时错误,
CPoint
缺少Foo
方法。我建议您在TypeScript平台上尝试一下。您创建的类型定义/接口只是编译时的事情,在我看来,结构子类型是一个很好的特性
如果使用附加方法Foo(x:string)
扩展点
接口,则会告诉编译器,每个想要成为点
的对象现在也需要此方法。在我看来,这正是你想要的,因为你可以发现所有你经过的地方,没有这些附加属性的物体
在将这种方法添加到接口之前,最好问问自己,是否每个具有点
特征的对象都真的需要这种方法。根据我的经验,最好引入更多的接口,例如Fooable
,并在需要对象时使用该接口,该对象需要使用Foo
方法
如果有一个方法确实需要同时具有特征(x,y)和Foo的对象,则可以执行以下操作:
function myMethodRequiringASpecialObject(x: Point & Fooable) {}
这称为“交叉点类型”。请参阅此处的更多信息:创建的类型定义/接口只是编译时的事情,在我看来,结构子类型是一个很好的特性 如果使用附加方法
Foo(x:string)
扩展点
接口,则会告诉编译器,每个想要成为点
的对象现在也需要此方法。在我看来,这正是你想要的,因为你可以发现所有你经过的地方,没有这些附加属性的物体
在将这种方法添加到接口之前,最好问问自己,是否每个具有点
特征的对象都真的需要这种方法。根据我的经验,最好引入更多的接口,例如Fooable
,并在需要对象时使用该接口,该对象需要使用Foo
方法
如果有一个方法确实需要同时具有特征(x,y)和Foo的对象,则可以执行以下操作:
function myMethodRequiringASpecialObject(x: Point & Fooable) {}
这称为“交叉点类型”。请参阅此处的更多信息: