MST
星途 面试题库

面试题:TypeScript中null、undefined、void和never的区别

请详细阐述TypeScript中null、undefined、void和never这几种类型的特点与区别,并举例说明在函数返回值和变量声明等场景下如何正确使用它们。
32.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

null类型

  • 特点:表示空值,是JavaScript的一个基本类型,在TypeScript中也有对应类型。它是object类型的子类型,这是历史遗留问题(在JavaScript中typeof null === 'object')。
  • 区别:与undefined不同,null是人为主动赋值表示“空”的意图,而undefined通常表示变量未初始化或函数无返回值。
  • 使用示例
    • 变量声明
let myNull: null = null;
  • 函数返回值
function returnNull(): null {
    return null;
}

undefined类型

  • 特点:表示未定义,也是JavaScript的基本类型。在TypeScript里,变量声明但未初始化时,其类型就是undefined
  • 区别:和null类似,但undefined更多是被动产生的,比如变量未赋值、对象属性不存在、函数无显式返回值等情况。
  • 使用示例
    • 变量声明
let myUndefined: undefined;
  • 函数返回值
function noReturnValue(): undefined {
    // 没有return语句,默认返回undefined
}

void类型

  • 特点:通常用于表示函数没有返回值。它可以赋值为nullundefined(在严格模式下,--strictNullChecks开启时,只能赋值undefined)。
  • 区别:与nullundefined不同,它不是代表某个具体的值,而是一种抽象的类型概念,主要用于函数返回值类型的标识。
  • 使用示例
    • 变量声明
let myVoid: void;
myVoid = undefined; // 在严格模式下,如果不允许null,只能赋值undefined
  • 函数返回值
function printMessage(): void {
    console.log('Hello');
    // 没有return语句,默认返回值类型为void
}

never类型

  • 特点:表示永远不存在的值的类型。通常用于函数抛出异常或函数永远不会有返回值(比如无限循环的函数)。它是所有类型的子类型,但是没有类型是never的子类型(除了never本身)。
  • 区别:与其他类型不同,never强调的是一种“不可能”的状态,而nullundefinedvoid都表示某种可能存在的“空”或“无返回”的状态。
  • 使用示例
    • 函数返回值
function throwError(message: string): never {
    throw new Error(message);
}

function infiniteLoop(): never {
    while (true) {}
}