在Javascript中,前面一篇文章介绍了TypeScript,相信看过这边文章的人应该对Ts有所了解了。这篇文章大家和我一起来了解下TS的基本知识点吧。
在开始之前我们先装环境:
npm i typescript -g //全局安装typescript
npm init -y //进入文件夹,初始化项目,生成package.json文件
tsc --init //创建tsconfig.json文件
npm i @types/node -S //这个主要是解决模块的声明
环境到此安装结束;
变量类型
(1)number 类型
let num1 : number = 20;
let num2 : number = 175.5;
let a1 : number = Infinity; //正无穷大
let a2 : number = -Infinity; //负无穷小
let a3 : number = NaN;
注意:Infinity, -Infinity, NaN 也属于Number类型
(2)undefined 类型
let un : undefined = undefined;
注意:undefined 类型的数据只能被赋值为 undefined,在 typescript中,已声明未初始化的值要直接访问的话,类型需要定义为undefined。
(3)null 类型
let nu : null = null;
注意:
null 类型只能被被赋值为null
null是一个空指针对象,undefined是未初始化的变量,所以,可以把undefined看成一个空变量,把unll看成一个空对象。
特别注意: 默认情况下,undefined 和 null 类型,是所有其它类型的子类型,也可以说成,它俩可以给所有其他类型赋值。
(4)string 类型
//值类型
let str : string = '你好!'
//引用类型
let str1 : String = new String('你好!')
(5)boolean 类型
let boo : boolean = true;
let boo1 : boolean = false;
(6)symbol 类型
let sy : symbol = Symbol('bar');
注意: symbol类型的值是通过Symbol构造函数创建的。
(7)数组类型
//字面量
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']
(8)元组类型(tuple)
let tup : [string,number] = ['asdasd', 43233];
注意:
元组和数组看起来有点类似,但是,是有区别的
元组的长度是有限的,而且分别为每一个元素定义了类型
(9)枚举类型(enum)
enum--->组织收集一组相关变量的方式。
数字枚举
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开始,也可以自行设置枚举成员的初始值,它们会依次递增。
字符串枚举
enum SIJI {
chun = '春',
xia = '夏',
qiu = '秋',
dong = '冬'
}
console.log(SIJI.chun)//春
console.log(SIJI.xia)//夏
console.log(SIJI.qiu)//秋
console.log(SIJI.dong)//冬
注意:
字符串枚举类型允许使用字符串来初始化枚举成员,可以是一个字符串字面量或者另一个字符串的枚举成员
字符串枚举类型不支持成员自增长,每个成员必须初始化,另外字符串枚举不会为成员生成发向映射
(10)void 类型
void 类型--->表示没有任何返回值,一般用于定义方法时方法没有返回值
。
function f1() : void {
console.log('void类型')
}
注意:
这里你也可以指定返回值类型为 undefined。因为 JS 中,如果函数没有返回值,则会默认返回 undefind。不过,使用 void 类型可以使表意更清晰。
(11)any 类型
注意: 其他类型都是any类型的子类型 ,any类型的值可以被赋值为任何类型的值
。
let an : any = 'any 类型';
console.log(an)//any 类型
an = 25;
console.log(an)//25
注意:对于any 需要注意两点
如果在声明变量时,没有声明其类型,也没有初始化,(因为类型推断会自动判断类型),那么它就会被判断为any类型
。
let an1;
an1 = '没有声明其类型,也没有初始化';
console.log(an1)//没有声明其类型,也没有初始化
an1 = 25
console.log(an1)//25
在any类型变量上可以访问任何属性,即使它不存在。
let something: any = 42
something.mayExist() // 没问题,因为其可能在运行时存在
something.toFixed() // 没问题,虽然确实存在,但是编译器并不会去检查
(12)never 类型
注意:
never 表示永远不会存在的值的类型, never 是任何类型的子类型,但是 没有任何类型是never的子类型或可以赋值给never类型(除了never本身之外)。即使 any也不可以赋值给never。
never 类型常用于两种情况
用于描述从不会有返回值的函数---》返回never的函数必须存在无法达到的终点。
function f5() : never {
while (true) {
// do something
}
}
用于描述总抛出错误的函数
function f2(msg : string) : never {
throw new Error(msg)
}
(13)日期类型
let da : Date = new Date()
console.log(da)
(14)正则表达式类型
//构造函数声明法
let reg1 : RegExp = new RegExp('ljy','gi')
console.log(reg1)
//字面量的声明法
let reg2 : RegExp = /ljy/gi
console.log(reg2)
总结
TS的数据类型有14种之多,这也使得前后端的差异越来越小。
对于习惯使用弱类型语言JS的同学可能有些不适应。