当前位置: 首页 > Web前端 > JavaScript

马上就是2023年了,你还不知道TypeScript吗?快速入门

时间:2023-03-27 14:46:42 JavaScript

前言TypeScript是具有类型语法的JavaScript。这是官网对TypeScript的定义。作为JavaScript的超集,TypeScript专注于类型系统。如今,TS已被广泛使用。它坚持与JavaScript核心语法标准ECMAScript同步开发,对于熟悉JavaScript的开发者来说也非常容易上手。TypeScript的优缺点我就不过多阐述了。进入正题,全局安装TypeScript的命令行工具。安装方法:npminstalltypescript-g安装完成后,我们可以在任何地方执行命令tsc[tsfile]编译typescript文件数据类型TypeScript支持的数据类型几乎和JavaScript一样。类型声明语法如下:let[variable]:[type]JavaScript中的数据类型包括:原始数据类型和引用类型。原始数据类型包括:boolean、number、string、null和undefined,还有ES6新的Symbol和BitInt。下面是五种基本类型对应的声明:typeexample/valuebooleanletb:boolean=truefalsenumberletnum:number=123stringletstr:string="HelloWorld"nullletx:null=nullundefinedletx:undefined=undefinedundefinedandnullis所有类型的子类型。这两种类型的值可以赋值给其他类型的变量://这样不会报错letnum:number=undefined//这样不会报错letnum:number=null除了基本类型,TS还提供了void、any、literal等类型:void:表示没有值,通常用于描述方法的返回值any:表示任意类型,官方不推荐,从而失去了类型的特性literal:声明的类型是变量的值,literal可以是一个也可以是多个leta:3//变量的值只能是3a=4//这个赋值会报错leta:3|'3'//变量的值只能是3或者'3'a='3'//这个赋值是正确的。数组和元组定义一个数组。通常有两种方式:type[]和数组泛型。letarr:number[]letarr:Array通过类型声明来限制数组中存储的数据类型,例如上面声明的两个数组中只允许存储number类型的数据。元组是TypeScript的一个新概念。它类似于数组,但允许不同类型的数据出现在列表中,并且必须声明为固定长度。它的定义如下:lettup:[string,number]=['Xiaoming',25]函数类型在JavaScript中,定义一个函数通常有两种方式:函数声明和函数表达式。对于一个函数,TypeScript需要约束入参类型和返回类型://函数声明functionsum(x:number,y:number):number{returnx+y}//函数表达式letsum=function(x:number,y:number):number{returnx+y};上面分别通过函数声明和函数表达式定义了一个函数,它有两个number类型的入参和一个number类型的返回值。如果一个函数没有返回值,它可以声明为void。在这样的语句约束下,入参和返回都要严格遵守约束条件,不能少传多传。可选参数如果函数的输入参数不确定,可以使用?设置可选参数:functionbuildName(firstName:string,lastName?:string){if(lastName){returnfirstName+''+lastName}else{returnfirstName}}需要注意的是可选参数后面必须跟必填参数.另外,ES6中提出的参数默认值在TS中会被识别为可选参数,也必须跟在必选参数后面。联合类型当我们声明的变量可能是多种类型时,可以声明为联合类型:string|数字。当一个变量被声明为联合类型时,在使用这个变量时,只能调用联合类型共有的属性和方法letmyFavoriteNumber:string|数字;myFavoriteNumber='七';我的最爱号码=7;早期JavaScript中的面向对象,其中类是通过构造函数实现的,继承是通过原型链实现的。类和类语法仅在ES6中引入。TypeScript不仅完全支持类语法,还增加了一些新的东西。修饰符TypeScript引入了三种属性修饰符:public、private、protectedpublic:被修饰的属性或方法是公共的,可以在任何地方访问,也是默认的修饰符private:被修饰的属性或方法是私有的,不允许在外部访问声明它的类。如果需要访问私有属性,可以配置寄存器(getter/setter)属性访问或修改。protected:被修饰的属性或方法被protected,与private修饰符的行为很相似,不同的是被protected修饰的成员在子类中是允许被访问的。另一种修饰符叫做:readonly,只读属性修饰符号。修改后的属性只允许读取,不允许修改。需要注意的是,如果它与其他访问修饰符一起存在,则需要写在它的后面。抽象类抽象类就是我们写一个类的时候,只是希望它作为父类继承,不想直接使用类的实例。对于这样的类,TypeScript引入了abstract关键字来修饰它,类中的方法也必须用this关键字修饰。abstractclassAnimal{publicnamepublicconstructor(name){this.name=name}publicabstractgiao()}letanimal=newAnimal()//这样会报错需要注意的是abstract中定义的抽象方法类必须在子类中实现。classCatextendsAnimal{publicgiao(){console.log('喵!');}}Interface我们知道类可以通过继承来扩展,但是一个类只能继承一个类。TypeScript引入了接口的语法。接口是面向对象中的一个重要概念。有时不同的类可以有一些共同的特征。这时候就可以将特性提取到接口中,用implements关键字实现。与类的单一继承相比,接口允许类实现多个。interfaceEat{eat():void}interfaceSay{say():void}classPersonimplementsEat,Say{privatenameeat():void{}say():void{}}使用函数、接口或类时,具体的类型并没有事先指定,而是在使用时指定了该类型的一个特性。一个例子我们写了一个方法,希望能够返回输入的值。functionfun(a:number):number{returna}在这里,我们硬编码了参数类型为number,但是如果我们想对string或其他类型使用这种方法,是不可行的。所以引入了泛型的写法:functionfun(a:T):T{returna;}在上面的例子中,我们在函数名后面加上了,这里的T用来指代一个数据类型,并指定函数返回值的T类型。在调用时,T的类型是从传递的参数的具体类型推断出来的。当多个类型参数定义泛型时,可以一次定义多个类型参数:functionfun(a:T,b:K):T{returna;}Genericconstraints使用泛型变量时,因为你不不知道它是什么类型,所以不能随意操作它的属性或方法。我可以确保变量类型属于我们通过约束泛型类型确定的范围:);returnarg;}在上诉的例子中,我们通过extends来限制变量的类型,实现Lengthwise接口,保证变量有length属性。通用接口interfaceList{[index:number]:T,length:number}letlist:List=['a','b','c']genericclassclassGenericNumber{value:吨;添加:(x:T,y:T)=>T;constructor(value:T){this.value=value}}letnumber=newGenericNumber(1)number.add=function(x,y){returnx+y}typealias通过type关键字,我们可以自己定义类型。例如,如果您有一组属性都是相同的联合类型,则有必要定义一个类型别名。输入myType=数字|stringinterfaceObj{attr1:myTypeattr2:myType}letobj:Obj={attr1:1,attr2:'2'}类型断言对于一些不确定的值我们可以手动指定一个类型,场景多用于联合类型和类型别名。作为语法类型myType=number|stringfunctiongetLength(params:myType):number{conststr=paramsasstringif(str.length)returnstr.lengthreturnstr.toString().length语法类型myType=number|stringfunctiongetLength(params:myType):number{conststr=paramsif(str.length)returnstr.lengthreturnstr.toString().length}结语这篇博客是对最近复习TypeScript的简单总结,这些对于入门级的知识来说完全够用了。有关详细信息,请参阅官方文档。参考:TS官方文档从JS角度开始使用TypeScript