TypeScript Null 和 Undefined
TypeScript 有强大的系统来处理 null
或者undefined
值。
默认情况下 null
和undefined
处理被禁用,可以通过设置启用strictNullChecks
成真。
本页的其余部分适用于 strictNullChecks
已启用。
类型
null
和undefined
是原始类型,可以像其他类型一样使用,例如string
.
什么时候 strictNullChecks
启用后,TypeScript 要求设置值,除非undefined
被明确添加到类型中。
可选链式调用
可选链式调用是 JavaScript 的一个特性,可以很好地与 TypeScript 的空值处理配合使用。它允许使用紧凑的语法访问对象上可能存在也可能不存在的属性。它可以与 ?.
访问属性时使用运算符。
例子
界面之家 {
平方英尺:数字;
院子?: {
平方英尺:数字;
};
}
函数 printYardSize(房屋:房屋){
const yardSize = house.yard?.sqft;
如果 (yardSize === 未定义) {
console.log('没有院子');
} 别的 {
console.log(`码数为 ${yardSize} 平方英尺`);
}
}
出租房屋:房子 = {
平方英尺:500
};
printYardSize(home); // 打印“无院子”
亲自尝试 »
无效合并
空值合并是另一个 JavaScript 特性,它也能很好地与 TypeScript 的空值处理配合使用。它允许编写具有回退功能的表达式,特别是在处理以下情况时: null
或者undefined
。当表达式中可以出现其他假值但仍然有效时,这很有用。它可以与 ??
表达式中的运算符,类似于使用&&
操作员。
例子
函数 printMileage(里程:数字 | null | undefined){
console.log(`里程:${mileage ??'不可用'}`);
}
printMileage(null); // 打印“里程:不可用”
printMileage(0); // 打印“里程:0”
亲自尝试 »
空断言
TypeScript 的推理系统并不完美,有时忽略某个值被 null
或者undefined
一个简单的方法是使用强制转换,但 TypeScript 还提供了 !
操作符作为一种便捷的快捷方式。
就像铸造一样,这可能不安全,应小心使用。
数组边界处理
即使 strictNullChecks
启用后,默认情况下 TypeScript 将假定数组访问永远不会返回未定义(除非未定义是数组类型的一部分)。
配置 noUncheckedIndexedAccess
可以用来改变这种行为。
例子
让数组:数字[] = [1, 2, 3];
let value = array[0]; // 使用 `noUncheckedIndexedAccess` 时,其类型为 `number | undefined`
亲自尝试 »