MST

星途 面试题库

面试题:TypeScript编译选项对类型兼容性的影响

假设你有一个项目,在使用`strictNullChecks`编译选项和不使用该选项时,类型兼容性会在哪些常见场景下表现出不同?请举例说明。
40.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 函数参数
    • 使用strictNullChecks
      • 例如,定义一个函数printLength,它接受一个字符串参数并打印其长度:
function printLength(str: string) {
    console.log(str.length);
}
let maybeStr: string | null = null;
// 下面这行代码会报错,因为strictNullChecks下,null不能赋值给string类型参数
printLength(maybeStr); 
  • 不使用strictNullChecks
function printLength(str: string) {
    console.log(str.length);
}
let maybeStr: string | null = null;
// 不会报错,在非strictNullChecks下,null可以赋值给string类型参数,运行时可能会出现空指针异常
printLength(maybeStr); 
  1. 变量赋值
    • 使用strictNullChecks
let num: number;
// 下面这行代码会报错,因为strictNullChecks下,不能将null赋值给number类型变量
num = null; 
  • 不使用strictNullChecks
let num: number;
// 不会报错,在非strictNullChecks下,可以将null赋值给number类型变量,运行时可能会出问题
num = null; 
  1. 对象属性访问
    • 使用strictNullChecks
interface User {
    name: string;
}
let user: User | null = null;
// 下面这行代码会报错,因为strictNullChecks下,可能为null的user不能直接访问name属性
console.log(user.name); 
  • 不使用strictNullChecks
interface User {
    name: string;
}
let user: User | null = null;
// 不会报错,在非strictNullChecks下,可以直接访问可能为null的user的name属性,运行时可能会因null而报错
console.log(user.name);