MST

星途 面试题库

面试题:TypeScript中类型推断与null、undefined、void和never的关系

在TypeScript中,当函数返回值可能为null或undefined时,类型推断是如何工作的?结合void和never类型,说明如何利用类型推断来确保代码的健壮性和可读性,举例说明复杂函数场景下的类型推断处理。
10.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

1. 函数返回值可能为 nullundefined 时的类型推断

在TypeScript中,如果函数返回值可能是 nullundefined,类型推断会将返回值类型设为包含这两个可能值的联合类型。例如:

function maybeGetSomething(): string | null | undefined {
    if (Math.random() > 0.5) {
        return "some string";
    }
    return null;
}
let result = maybeGetSomething();
// result的类型为 string | null | undefined

2. voidnever 类型与类型推断

  • void 类型:表示没有任何类型,通常用于函数没有返回值的情况。例如:
function logMessage(message: string): void {
    console.log(message);
}
let voidResult = logMessage("Hello"); 
// voidResult的类型为void,意味着不能对其进行任何操作,因为它没有实际的值
  • never 类型:表示永远不存在的值的类型。通常用于函数抛出异常或永远不会有返回值的情况。例如:
function throwError(message: string): never {
    throw new Error(message);
}
let neverResult = throwError("An error occurred"); 
// neverResult的类型为never,意味着该变量实际上不会存在,因为函数永远不会正常返回

3. 复杂函数场景下的类型推断处理

考虑一个复杂的函数,它根据不同的条件返回不同类型的值,并且其中一些返回值可能为 nullundefined

interface User {
    name: string;
    age: number;
}

function getUserData(userId: number): User | null | undefined {
    if (userId > 10) {
        return { name: "John", age: 30 };
    }
    return null;
}

function processUserData(userId: number) {
    let user = getUserData(userId);
    if (user) {
        console.log(`User ${user.name} is ${user.age} years old`);
    } else {
        console.log("User not found");
    }
}

在上述代码中,getUserData 函数返回 User | null | undefined 类型。在 processUserData 函数中,通过类型推断,当使用 if (user) 进行检查后,TypeScript 能明白在 if 块内 user 类型为 User,从而确保在访问 user.nameuser.age 时不会出现类型错误,提高了代码的健壮性和可读性。如果没有正确的类型推断,访问 nullundefined 的属性会导致运行时错误。