当前位置: 首页 > 科技观察

TypeScript中的类型到底是什么?

时间:2023-03-12 06:08:47 科技观察

TypeScript是具有类型化语法的JavaScript,一种构建在JavaScript之上的强类型编程语言。它内置了常见的基本类型,如字符串、数字和布尔值。在这些类型的基础上,我们可以在声明变量的时候显式地声明变量的类型。letname:string="阿宝哥"那么在TypeScript中,类型到底是什么?实际上,您可以将类型理解为值的集合。比如你可以把数字类型看成是所有数字的集合,1.0和68属于这个集合,但是“阿宝哥”不属于这个集合,因为它属于字符串类型。对于集合,最小的集合是空集,它不包含任何值。TypeScript中对应的类型是never类型。因为它的字段是空的,所以不能给never类型的变量赋值:letnum:never=123;//错误名称:never="Abaoge";//下一个最小的Errorlet集包含单个值集合。TypeScript中对应的类型是字面量类型,也称为单元类型(UnitType)。typeA="A";typeB="B";leta:A="A"//Okletb:B="A"//由于Error有一组单值,是否有一组二值?答案是肯定的,boolean类型是true和false值的集合。此外,我们还可以使用运算符|将文字类型组合成新类型,也称为联合类型。如果你还不了解联合类型,可以观看《理解TypeScript联合类型的多个知识点》视频。类型AB='A'|'B';leta:AB='A'//Okletc:AB="C"//错误除了有限集合之外,我们前面介绍的字符串和数字类型都属于无限集合。此外,为了满足不同的开发需求,TypeScript还允许我们自定义类型。例如,这里我们使用interface关键字定义了3种类型。接口Vector1D{x:数字;}interfaceVector2D{x:数字;y:数字;}interfaceVector3D{x:数字;y:数字;z:数字;}其中Vector1D类型表示包含x属性,属性值的类型为number类型对象的集合。Vector2D类型表示一个包含x和y属性的集合,属性值的类型是数字类型对象。为了方便大家理解,我们用JS表达式来描述上面的规则:v1&&typeofv1==="object"&&typeofv1.x==="number"//Vector1Dv2&&typeofv2==="object"&&typeofv2.x==="number"&&typeofv2.y==="number"//Vector2D其实对于以上三种类型,我们还可以通过extends扩展已有的接口类型:interfaceVector1D{x:数字;}interfaceVector2DextendsVector1D{y:number;}interfaceVector3DextendsVector2D{z:number;在使用名义类型系统的语言中,例如Java、C++。通常类用于描述对象类型,Vector1D类称为父类,Vector2D类称为子类。但是,TypeScript使用结构化类型系统来更好地与使用鸭子类型的JavaScript兼容。Vector1D在类型系统中称为SuperType,而Vector2D称为SubType。这种关系通常被绘制成层次结构,但从集合的角度来看,维恩图更合适。维恩图是一种草图,用于在称为集合论的数学分支中表示不太严格意义上的集合。它们用来表示不同事物集合之间的数学或逻辑联系,特别适合表达集合之间的“粗略关系”。这里3种关系对应的维恩图是这样的。现在让我们做一个总结。与父类型Vector1D相比,子类型Vector2D将包含更多的属性,即描述的对象更精确。Vector2D子类型对应的集合包含在Vector1D超类型对应的集合中。学这个有什么用?让我们看一个例子:interfaceVector1D{x:number;}interfaceVector2D{x:数字;y:数字;}typeSubtypeOf=TextendsU?true:falsetypeA=SubtypeOf//truetypeB=SubtypeOf//truetypeC=SubtypeOf//false理解TS中的类型,采用的结构化类型系统是TSAdvanced这其中的关键值得好好研究。如果遇到不清楚的地方,欢迎随时与阿宝哥交流。您喜欢以这种形式学习TS吗?