Typescript - 变量类型
原文:TypeScript基本知识点整理
一、number
1 2 3 4 5 | let num1 : number = 20; let num2 : number = 175.5; let a1 : number = Infinity; //正无穷大 let a2 : number = -Infinity; //负无穷小 let a3 : number = NaN; |
这和 js 一样,Infinity、-Infinity、NaN 也是属于 Number 类型的;
二、undefined
1 | let un : undefined = undefined; |
在 ts 中,undefined 也是单独的数据类型,如上。需要注意的是,undefined类型的变量不能被赋值成其他类型,“undefined 类型的数据只能被赋值为 undefined”。
1 2 3 | // 报错,不能编译 let un: undefined; un = 5; |
三、null
1 | let nu : null = null ; |
同上,null 类型的变量只能赋值为 nul。
null 是一个空指针对象, undefined 是未初始化的变量,所以可以把 undefined 看成一个空变量, 把 null 看成一个空对象。
特别注意:在 ts 中, null 和 undefined 类型,是所有其他类型的子类型,即,这哥俩可以被赋值给所有其他类型,并且被赋值后在赋值原来数据类型的数据不会报错...
1234// 不会报错,成功编译
var
un = 5;
un =
null
;
un = 6;
四、string 类型
1 2 3 4 | //值类型 let str : string = '你好!' //引用类型 let str1 : String = new String( '你好!' ) |
五、boolean 类型
1 2 | let boo : boolean = true ; let boo1 : boolean = false |
六、symbol 类型(js 在 es6 版本拓展的新的基础数据类型)
1 | let sy : symbol = Symbol( 'bar' ); |
和 js 一样,构造这个数据类型的时候只能通过如上的 Symbol 构造函数创建。
七、数组 类型
1 2 3 4 5 6 7 8 9 10 11 | //字面量 let arr1 : number[] = [1, 2] //泛型---->相当于数组中每个元素的类型 let arr2 : Array<string> = [ 'a' , 's' ] //构造函数 let arr3 : string[] = new Array( 'a' , 's' ) //联合类型-->这里的联合类型的意思是,数组中元素的类型可以是number 或 string,两种都有也可以 let arr4 : Array<number | string> = [2, 'a' , 3, 'b' , ...] |
八、元组 类型(tuple)
这是 ts 特有的数据类型,先看示例:
1 | let tup : [string, number] = [ 'asdasd' , 43233]; |
初看上去,和数组看起来有点类似,但是,是由区别的:元组类型有长度限制,并且每一个位置上的数据类型一一对应,如上例中 tup 数组长度只能是 2,且 tup[0] 必须是 string 型,tup[1] 必须是 number 型,这三点是区别于数组的联合类型的地方。
九、枚举 类型(enum)
枚举类型是个蛋碎一地的类型,这里只记录常用的,研究细节还请移步:Typescript - 枚举;
数字枚举:
1 2 3 4 5 6 7 8 9 10 11 | enum REN { // nan = 1 ----->初始化下标 nan, nv, yao } console.log(REN.nan) //0 console.log(REN.nv) //1 console.log(REN.yao) //2 //使用数字枚举时,TS 会为枚举成员生成反向映射 console.log(REN[2]) // yao |
当然,数字枚举的下标默认从 0 开始,也可以自行设置成员的初始值,他们会自行递增。
字符串枚举:
1 2 3 4 5 6 7 8 9 10 11 | enum SIJI { chun = '春' , xia = '夏' , qiu = '秋' , dong = '冬' } console.log(SIJI.chun) //春 console.log(SIJI.xia) //夏 console.log(SIJI.qiu) //秋 console.log(SIJI.dong) //冬 |
字符串枚举不支持成员自增长,每个成员必须要初始化,且字符串枚举不会为成员生成反向映射。
十、void 类型
表示没有返回值,一般用于方法(function)中。
1 2 3 4 5 6 7 8 9 | // es 5 function fn() : void { console.log( '...' ) } // es6 () : void => { console.log( '...' ) } |
这里,我们也可以指定函数的返回值为 undefined。因为在 js 中,如果函数没有返回值,则会默认返回 undefined。不过,使用 void 类型可以使表意更清晰。
十一、 any 类型
any 类型是一个最通用的类型,其他类型都是 any 的子类型,因此,any 类型可以被赋值成任何类型的值。
1 2 3 4 | let an : any = 'any 类型' ; console.log(an) //any 类型 an = 25; console.log(an) //25 |
关于 any 有两点需要注意:
1)如果在声明变量时,没有声明其类型,也没有初始化,那么在 ts 做类型推断的时候会被判断成 any 类型。
2)在 any 类型上可以访问任何属性,即使这个属性对于某些数据类型不存在:
1 2 3 | let something: any = 42 something.mayExist() // 没问题,因为其可能在运行时存在 something.toFixed() // 没问题,虽然确实存在,但是编译器并不会去检查 |
十二、never 类型
never 类型表示永远不会存在的值的类型,常用于描述函数。never 是任何类型的子类型,never 没有子类型,即 never 是最后一层,因此,never 型的数据只能被赋值成 never 型。
never 类型通常用于两种情况:
1.用来描述抛出错误的函数:
1 2 3 | function fn(msg : string) : never { throw new Error(msg) } |
2.函数中存在无法到达的终点,如死循环:
1 2 3 4 5 | function fn() : never { while ( true ) { // do something } } |
十三、日期 类型
1 2 | let da : Date = new Date() console.log(da) |
十四、正则 类型
1 2 3 4 5 6 7 | //构造函数声明法 let reg1 : RegExp = new RegExp( 'ljy' , 'gi' ) console.log(reg1) //字面量的声明法 let reg2 : RegExp = /ljy/gi console.log(reg2) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战