前端系列三十四:TS类型兼容

本文介绍了TypeScript的类型兼容性,包括结构化类型系统(鸭子类型)、类的兼容性、接口兼容性和函数兼容性的概念和示例。在结构化类型系统中,如果两个对象具有相同的形状,那么它们被认为是兼容的。文章通过代码示例详细解释了如何判断不同类型的兼容性,如类与类、接口与接口、函数与函数之间的兼容性。
摘要由CSDN通过智能技术生成

类型兼容性:

两种类型系统:

1. Structural Type System (结构化类型系统)

2.Nominal Type System ( 标明类型系统 )

TS采用的是结构化类型系统,也叫做 duck typing (鸭子类型) ,'类型检查关注的是值所具有的形状'

也就是说,在结构类型系统中,如果两个对象具有相同的形状,则认为它们属于同一类型

写法:

class Point { x: number; y: number }

class p: Point { x:number; y: number }

const p: Point = new Point2D( )

解释:

1.Point和Point2D是两个名称不同的类

2.变量p的类型被显示为Point类型,但是,它的值却是Point2D的实例,并且没有类型错误

3.因为TS是结构化类型系统,只检查Point和Point2D的结构是否相同 ( 相同,都具有x和y两个属性,属性类型也相同 )

4.但是,如果在Nominal Type System 中 ( 比如, C#、Java等 ),它们是不同的类,类型无法兼容


在结构化类型系统中,如果两个对象具有相同的形状,则认为它们属于同一类型,这种说法并不准确
更准确的说法: 
    对于对象类型来说,y的成员至少与x相同,则x兼容y(成员多的可以赋值给少的)

写法:

class Point { x: number; y: number }
class P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值