TypeScript基础语法使用参考
基础类型// 基本类型与js一致letname:stringAliceletage:number25letisActive:booleantrueletnothing:nullnullletnotDefined:undefinedundefinedletsym:symbolSymbol(id)letbig:bigint9007199254740991n// 数组letnumbers:number[][1,2,3]letstrings:Arraystring[a,b]// 元组lettuple:[string,number][hello,42]// 对象letperson:{name:string;age:number}{name:Bob,age:30}// any尽量避免使用letrandom:anycould be anything// unknown安全的 anyletuncertain:unknownmaybe stringif(typeofuncertainstring){console.log(uncertain.toUpperCase())}// void无返回值functionlogMessage(msg:string):void{console.log(msg)}// never永远不会返回functionthrowError(msg:string):never{thrownewError(msg)}类型断言与守卫// 类型断言letsomeValue:unknownhello worldletstrLength1:number(someValueasstring).lengthletstrLength2:number(stringsomeValue).length// 非空断言letelement:HTMLElement|nulldocument.getElementById(app)element!.style.displayblock// 确信不为 null// typeof 守卫类/对象functionprocessValue(value:string|number){if(typeofvaluestring){returnvalue.toUpperCase()}returnvalue.toFixed(2)}// instanceof 守卫类/对象functionhandleError(error:Error|string){if(errorinstanceofError){console.log(error.message)}else{console.log(error)}}// in 守卫属性检查interfaceCat{meow():void}interfaceDog{bark():void}functionmakeSound(animal:Cat|Dog){if(meowinanimal){animal.meow()}else{animal.bark()}}类 (Class)// 访问修饰符classAnimal{publicname:string// 任何地方可访问privateage:number// 仅类内部protectedspecies:string// 类内部和子类constructor(name:string,age:number){this.namenamethis.ageagethis.speciesunknown}// 方法publicspeak():void{console.log(${this.name}makes a sound)}// 私有方法privategetAge():number{returnthis.age}}// 继承classDogextendsAnimal{constructor(name:string,age:number){super(name,age)this.speciescanine// protected 可访问// this.age // Error: private 不可访问}speak():void{console.log(${this.name}barks)}}// 抽象类abstractclassShape{abstractgetArea():number// 抽象方法getDescription():string{returnArea:${this.getArea()}}}classCircleextendsShape{constructor(privateradius:number){super()}getArea():number{returnMath.PI*this.radius**2}}// 实现接口interfaceFlyable{fly():void}classBirdextendsAnimalimplementsFlyable{fly():void{console.log(${this.name}is flying)}}接口 (Interface)// 基础接口interfaceUser{id:numbername:stringemail:stringage?:number// 可选属性readonlycreatedAt:Date// 只读属性}// 方法定义interfaceGreetable{greet(name:string):voidsayHi:(msg:string)void}// 继承接口interfaceAdminextendsUser{permissions:string[]}// 索引签名interfaceStringMap{[key:string]:string}// 使用constuser:User{id:1,name:John,email:johnexample.com,createdAt:newDate()}类型别名 (Type)// 联合类型typeStatuspending|success|errortypeIDstring|number// 交叉类型typeEmployeeUser{department:string}// 工具类型typePartialUserPartialUser// 所有属性可选typeRequiredUserRequiredUser// 所有属性必填typeReadonlyUserReadonlyUser// 所有属性只读typeUserNamePickUser,name|id// 选取部分属性typeUserWithoutEmailOmitUser,email// 排除属性// 使用letstatus:Statuspending函数// 函数类型声明typeAddFn(a:number,b:number)number// 函数实现constadd:AddFn(a,b)ab// 泛型函数functionidentityT(value:T):T{returnvalue}// 多泛型functionmergeT,U(obj1:T,obj2:U):TU{return{...obj1,...obj2}}// 参数默认值functiongreet(name:stringGuest):string{returnHello,${name}}// 剩余参数functionsum(...numbers:number[]):number{returnnumbers.reduce((a,b)ab,0)}// 重载functionprocess(value:string):stringfunctionprocess(value:number):numberfunctionprocess(value:string|number):string|number{if(typeofvaluestring)returnvalue.toUpperCase()returnvalue*2}泛型// 泛型接口interfaceApiResponseT{data:Tstatus:numbermessage:string}// 泛型类classBoxT{privatecontent:Tconstructor(value:T){this.contentvalue}getValue():T{returnthis.content}setValue(value:T):void{this.contentvalue}}// 泛型约束interfaceHasLength{length:number}functionlogLengthTextendsHasLength(item:T):T{console.log(item.length)returnitem}// keyof 约束functiongetPropertyT,KextendskeyofT(obj:T,key:K):T[K]{returnobj[key]}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2521825.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!