类型断言
你清楚地知道一个实体的类型。它没有运行时的影响,只是在编译阶段起作用。
形式:
-
尖括号”语法
let someValue: any = "this is a string"; let strLength: number = (<string>someValue).length;
-
as
语法:let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;
两种形式是等价的,当你在TypeScript里使用JSX时,只有 as
语法断言是被允许的。
类型推断
具体的对象属性,ts会自动类型推断(假设推断为string)。
但如果使用这个属性的位置设定为其他类型(假设为字符串字面量类型),这样就会产生类型冲突。
var req = {
url: 'http://',
method: 'GET'
};
function handleRequest(url: string, method: 'GET' | 'POST'): void{
}
handleRequest(req.url, req.method);//类型“string”的参数不能赋给类型“"GET" | "POST"”的参数。
- 字面量推断:
as const
指定类型为字面量类型。
var req = {
url: 'http://',
method: 'GET'
} as const;
function handleRequest(url: string, method: 'GET' | 'POST'): void{}
handleRequest(req.url, req.method );
字面量类型与字面量推断
类型:
interface class enum
object / 具体对象字面量类型
number / 具体数字字面量类型
boolean / 具体布尔字面量类型
string / 具体字符串字面量类型
array[] Array<T> 具体数组字面量类型
symbol bigint字面量类型
值:
class enum objet 具体数字, 布尔值, 字符串值
function 具体array
sumbol()的具体值 bigint具体值
案例未写出:需要再写
类型收窄
- typeof类型收窄:限制当前类型。(if语句中使用)
与js中语义相同,返回指定类型的字符串。
- 真值收窄:通过布尔判断的方式实现类型收窄
- 等值收窄
in
操作符收窄:通过对象中是否有指定属性来实现类型收窄。instanceof
操作符收窄:对象是否来自指定构造函数。- 赋值收窄:通过赋值语句实现类型收窄。
案例未记录