TS 类型

131 阅读1分钟

类型推断

TS会根据上下文环境自动推断出变量的类型

// 基于赋值表达式推断类型的能力称为类型推断
{
   let str = 'this is string';
   let num = 1;
   let bool = true
}
// 如果定义的时候没有赋值,会被推断成any类型而完全不被类型检查 
let mNumber;
mNumber = '121';
mNumber = 12

类型断言

类似仅作用在类型层面的强制类型转换

  • 语法
// 尖括号 语法
let someValue:any = 'nihao';
let strLength:number = (<string> someValue).length

// as 语法
let someValue:any = 'nihao';
let strLength:number = (someValue as string).length

非空断言

在上下文中当类型检查器无法断定类型时,一个新的后缀表达式操作符!可以用于断言操作对象时非null和非undefined类型。具体,x!将从x值域中排除null和undefined。

let x:number;
test()
console.log(2 * x);//Error,Variable 'x' is used before being assigned
function test(){
  x = 10
}

// 修改后
let x!:number
test()
console.log(2 * x) // 20
function test(){
  x = 10
}

联合类型

联合类型表示取值可以为多种类型中的一种,使用|分割每个类型

let mNumber : string  | number
// 联合类型通常与null或undefined一起使用
const sayHello = (name:string | undefined) => {
   ....
}

类型别名

type Message = string | string[];
let greet = (message:Message) =>{
  ....
}