📜  如何在 TypeScript 中强制执行严格的空检查?

📅  最后修改于: 2022-05-13 01:56:12.793000             🧑  作者: Mango

如何在 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