今天看vue的源码。看到了变量后加!的用法;后来查了一下:
结论
1、as和!用于属性的读取,都可以缩小类型检查范围,都做判空用途时是等价的。只是!具体用于告知编译器此值不可能为空值(null和undefined),而as不限于此。
2、?可用于属性的定义和读取,读取时告诉编译器此值可能为空值(null和undefined),需要做判断。
as:
let someValue: any = "this is a string";
let strLength: number = (someValue).length;
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;
问号(?)用于属性定义
问号表示可选的属性,一般用于属性定义,如,用于接口时:
interface SquareConfig {
color?: string;
width?: number;
}
SquareConfig的定义与下面的代码等价:
interface SquareConfig {
color: string|undefined;
width: number|undefined;
}