TyprScript类型推论
# TyprScript类型推论
# 类型推论
某些地方类型注解可以省略不写,TS的类型推论机制会帮助提供类型 常见场景:
1.声明变量并初始化时
2.决定函数返回值时
如果没有明确的指定类型,那么 TypeScript 会依照类型推论的规则推断出一个类型
我们没有给 x 指定明确类型的时候,typescript 会推断出 x 的类型是 number
let x = 1;
x = true; // 报错
1
2
2
而如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:
声明变量并立即初始化值,此时可以省略类型注解 注意:如果声明变量但没有立即初始化值,此时必须手动添加类型注解
let x;
x = 1; // 编译正确
x = true; // 编译正确
1
2
3
2
3
# 类型断言
我们可能比typescript更加清楚的知道某个变量的类型,所以我们可能希望手动指定一个值的类型
尖括号写法
let str: any = "to be or not to be"; let strLength: number = (<string>str).length;
1
2as 写法
let str: any = "to be or not to be"; let strLength: number = (str as string).length;
1
2
# 非空断言
在上下文中当类型检查器无法断定类型时,可以使用缀表达式操作符 !
进行断言操作对象是非 null 和非 undefined 的类型,即x!的值不会为 null 或 undefined
let user: string | null | undefined;
console.log(user!.toUpperCase()); // 编译正确
console.log(user.toUpperCase()); // 错误
1
2
3
2
3
# 确定赋值断言
我们定义了变量, 没有赋值就使用,则会报错
let value:number
console.log(value); // Variable 'value' is used before being assigned.
1
2
2
通过 let x!: number; 确定赋值断言,TypeScript 编译器就会知道该属性会被明确地赋值
let value!:number
console.log(value); // undefined 编译正确
1
2
2
# any临时断言
window.abc = 123
//这样写会报错因为window没有abc这个东西
(window as any).abc = 123
//可以使用any临时断言在 any 类型的变量上,访问任何属性都是允许的。
1
2
3
4
5
2
3
4
5
上次更新: 2024/08/14, 04:14:33