如何在 TypeScript 中强制执行严格的空检查?
在 Typescript 中,要在 tsconfig.json 文件中强制执行严格的 null 检查,我们需要将“strictNullChecks”启用为 true。当“strictNullChecks”为假时,语言通常会忽略 null 和 undefined 类型的变量。如果在需要确定值的地方使用 null 和 undefined,则会引发错误。当使用 null 和 undefined 时“strictNullChecks”为真时,会引发类型错误。
示例 1:将 null 和 undefined 分配给字符串类型变量
一个空值被传递给一个字符串类型的变量。
Javascript
let var1: string = null;
Javascript
let var1: string = undefined;
Javascript
let var1: string | number;
let var2: string | null;
let var3: string | undefined;
// Throws error
var1;
// Throws error
var2;
// Doesn't Throws error
var3;
var1 = 1;
var2 = "abc";
// No error
var1;
// No error
var2;
Javascript
interface Student {
name: string;
age?: number;
}
function displayStudentInfo(student: Student) {
// Error TS2532: Object is possibly 'undefined'.
console.log(student.name + ` , ${student.age.toString()}`);
// Confirming that student.age is not null
console.log(student.name + ` , ${student.age!.toString()}`);
// Condition is checked that student's age isn't null
if (student.age != null) {
console.log(student.name + ` , ${student.age.toString()}`);
}
}
let obj: Student = { name: "sean", age: 20 };
console.log(displayStudentInfo(obj));
输出:
启用严格的空检查时。
如果未启用严格的空检查:
如果 undefined 被赋予一个变量并且strictnullchecks为真:
Javascript
let var1: string = undefined;
输出:
示例 2:在赋值之前引用变量
当启用strictnullchecks时,不能引用未分配任何值的变量。唯一的例外是当变量是“未定义”类型时,这些变量可以在被任何值赋值之前被引用。
Javascript
let var1: string | number;
let var2: string | null;
let var3: string | undefined;
// Throws error
var1;
// Throws error
var2;
// Doesn't Throws error
var3;
var1 = 1;
var2 = "abc";
// No error
var1;
// No error
var2;
输出:这是代码编辑器中的样子。
示例 3:涵盖 strictnullchecks
下面的代码是一个strictnullchecks的小例子。创建了一个接口,并在声明变量 age 时使用了?: ,它表示该变量可以为 null 或已标识。由于当我们尝试显示 student.age 时启用了严格的空检查,它会给我们警告。当进一步确认 student.age 不为空时,不会给出警告或错误。
Javascript
interface Student {
name: string;
age?: number;
}
function displayStudentInfo(student: Student) {
// Error TS2532: Object is possibly 'undefined'.
console.log(student.name + ` , ${student.age.toString()}`);
// Confirming that student.age is not null
console.log(student.name + ` , ${student.age!.toString()}`);
// Condition is checked that student's age isn't null
if (student.age != null) {
console.log(student.name + ` , ${student.age.toString()}`);
}
}
let obj: Student = { name: "sean", age: 20 };
console.log(displayStudentInfo(obj));
输出:
sean , 20
sean , 20
sean , 20