在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的同学可能有些不适应。