类型推断
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) =>{
....
}