1. 类型断言
1.1 自己很清楚此时应该使用某个更确切的类型
1.2 类似Java中的强制类型转换
// 写法constx: any ="1111"constxL: number =(x as string).length
// 尖括号写法constx: any ="1111"// const xl: number = (<string>x).length;2. 非空断言
使用【!】后缀表达式操作符来断言操作的对象是非undefined和非null的,多用于带联合类型包括有undefined或null时,确定真实类型
constx: string |undefined=undefinedconsty: string = x // 直接将undefiend赋值会 Type 'undefined' is not assignable to type 'string'const y:string = x!// 排除undefined3. 确定赋值断言
允许在实例属性和变量声明后面放置一个[!]操作符,告诉TS该属性或变量会被明确的赋值
// let x:number;let x!:number;// 添加!后 正确使用 init()
console.log(x)// Errorfunctioninit(){
x =1}
在ts中,会报 Variable 'x' is used before being assigned,按道理说走init方法会肯定赋值,因此需要确定赋值断言
1. 联合类型
使用[|]来使用多种类型中任意一个即可,通常与null、undefined一起使用
letx: string | number |undefined=1
x ="2"// 字面量类型,来约束取值只能是某几个值中一个 constcolorType:'red'|'yellow'='red'constwhichWay:1|2=22. 可辨识联合类型
多用于多组类型在联合时,每组类型中含相同属性的定义
3. 类型别名
type colorType = string | number
letc:colorType ="red"letc:colorType =1
TS交叉类型
通过&运算符,将多个类型合并为一个类型
type colorType ={x:number}&{y:string}constc:colorType ={x:1,y:'red'}1. 同名基础类型属性的合并
合并完成后,同名属性的类型将变成never
2. 同名非基础类型属性的合并
合并完成后,可使用合并类型
TS接口及与类型别名区别
在TS中,接口除了对类的一部分行为进行抽象外(Java中的接口常用操作方式),也常用对对象的形状进行描述
1. 针对一组对象进行描述
interfaceUser{username:string;password:string;}2. 可选、只读、任意属性
interfaceUser{
username?: string;// 可选
readonly password: string // 只读[propName:string]: any // 任意属性}3. 与类型别名区别
3.1 均可定义为描述对象的形状或者函数签名 // 同3.2 但类型别名可以用于定义其他类型 // type alias 不同
type color = string
type x ={x:string}
type y ={y:number}
type xy = x | y
type tupleColor =[string,number]3.3 相互继承
interfaceextendsinterfacetype alias extendstype alias
interfaceextends type alias
type alias extendsinterface3.4 实现
classimplementsinterfaceclassimplementstype alias // 但只能是单类型别名,不支持联合类型的实现3.5 自动合并 // interface 不同
接口可定义多次,相同的接口会被合并为单个接口