目录
基础类型
javascript基础类型
typescript扩展类型
高级类型
交叉类型
联合类型
类型保护与区分类型
可辨识联合
基础类型
javascript基础类型
基础类型 | 类型名称 | 示例 |
布尔 | boolean | let gender:boolean=false |
数字 | number | let age:number=8 |
字符串 | string | let firstName:string='吴';let lastName='晨'; fullName:string=`${firstName} ${lastName}` |
数组 | T[]或Array<T> | let season:string[]=['Spring','Summer'] |
null | null | let aNull=null |
undefined | undefined | let aUndefiend=undefined |
对象 | object | const mary={name:'Mery',age:18} // typeof mary==='object' |
symbol | symbol | const aSymbol:symbol=Symbol() |
注意:
1. 数字类型都是浮点型,不区分整数和浮点数
2. 字符串有三种表示方法:"双引号"、'单引号'、`反引号`
typescript扩展类型
基础类型 | 类型名称 | 示例 |
元组 | tuple | let aTuple:[string,number]=['cc',age:24] |
枚举 | enum | enum Color={Red,Green,Blue} const green=Color[1] |
任意值 | any | let notSure: any = 4; notSure = "maybe a string instead"; notSure = false; |
空值 | void | function f(name:string):void{console.log(name)} |
Never | never | function error(message: string): never { throw new Error(message); } |
注意:
1. 元组实际上是数组,可以使用多值赋值,不同类型的元组不同互相赋值
2. 枚举类型默认是0开始的数值列表,也可以指定值;枚举类型名作为数组可以获取字符串类型的枚举值(不推荐使用)
3. any表示在编程阶段还不清楚的类型,这可能来自于动态的内容,比如来自用户输入
4. void 一般用于表示函数没有返回值
5. never 表示用不存在的值的类型,如抛出异常、死循环等
高级类型
交叉类型
1.交叉类型是将多个类型合并为一个类型,包含所需要的所有类型的特性
联合类型
- 它表示一个值可以是几种类型之一
- 用竖线(|)分割开每个类型,表示该值可以是其中的某一个类型
- 如果一个值是联合类型,我们只能访问此联合类型公共的成员
interface Bird{flay();layEggs();
}
interface Fish{swim();layEggs();
}
function getSmallPet():Fish | Bird{//...
}
let pet=getSmallPet();
pet.layEggs(); //ok
pet.flay();// 错误
//如果我们用成员去访问都会报错,此时应该避免报错
//所有要使用类型保护
类型保护与区分类型
1.使用类型断言的类型保护
2.使用typeof的类型保护
3.使用instanceof的类型保护
4.使用自定义的类型保护
interface Bird{fly();layEggs();
}
interface Fish{swim();layEggs();
}//使用断言的类型保护
function move(pet:Bird | Fish){(<Fish>pet).swim():(<Fish>pet).swim():(<Bird>pet).fly();
}//使用typeof的类型保护
function process(data:string | number):string{if(typeof data==='string'){//... }else{//...}
}//使用instanceof的类型保护
function process(data:string | number):string{if(data instanceof String){//... }else{//...}
}//自定义保护类型
function isFish(pet: Fish | Bird): pet is Fish{return (<Fish>pet).swim !==undefiend;
}
可辨识联合
单例类型,联合类型,类型保护和类型别名来创建一个叫做 可辨识联合的高级模式,它也称做 标签联合或 代数数据类型。 可辨识联合在函数式编程很有用处。 一些语言会自动地为你辨识联合;而TypeScript则基于已有的JavaScript模式。 它具有3个要素:
- 具有普通的单例类型属性— 可辨识的特征。
- 一个类型别名包含了那些类型的联合— 联合。
- 此属性上的类型保护。
interface Square{kind:'square';size:number;
}
interface Rectangle{kind:'rectangle';width:number;height:number;
}
type Shape=Square | Rectangle;
function area(s:Shape){switch(s.kind){case:'Square': return s.size * s.size;case:'Rectangle': return s.width * s.height;}
}
参考文档: typescript 官方文档