- 引用:
- ts any、unknown、object、void、undefined、null 和 never 的类型兼容性
null
表示这里有值,但是个空值undefined
表示这里没有值null
、undefined
是一个具有意义的实际类型null
值可以赋值给哪些类型?
var x1: any = null
var x2: unknown = null
var x3: object = null // 当 strictNullChecks: true 时会报错
var x4: void = null // 当 strictNullChecks: true 时会报错
var x5: undefined = null // 当 strictNullChecks: true 时会报错
var x6: null = null
null
类型可以被哪些类型赋值?
const a1 = 1 as unknown as any
const a2 = 1 as unknown as undefined
const a3 = 1 as unknown as null
const a4 = 1 as unknown as never
var x1: null = a1
var x2: null = a2 // 当 strictNullChecks: true 时会报错
var x3: null = a3
var x4: null = a4
undefined
值可以赋值给哪些类型?
var x1: any = undefined
var x2: unknown = undefined
var x3: object = undefined // 当 strictNullChecks: true 时会报错
var x4: void = undefined
var x5: undefined = undefined
var x6: null = undefined // 当 strictNullChecks: true 时会报错
undefined
类型可以被哪些类型赋值?
const a1 = 1 as unknown as any
const a2 = 1 as unknown as undefined
const a3 = 1 as unknown as null
const a4 = 1 as unknown as never
var x1: undefined = a1
var x2: undefined = a2
var x3: undefined = a3 // 当 strictNullChecks: true 时会报错
var x4: undefined = a4
strictNullChecks
表示“严格的空值检查”,它是 TypeScript 的一个编译选项。- 当开启
strictNullChecks
选项时,null
和 undefined
值将不再被认为是所有类型的子类型。这有助于在 ts 代码中捕获潜在的空值引用错误。 strictNullChecks
默认值是 false
- 实践:请在
tsconfig.json
中开启 strictNullChecks
配置,打开更严格的 null
类型检查。
{
"compilerOptions": {
"strictNullChecks": true
}
}