面试题答案
一键面试1. 函数返回值可能为 null
或 undefined
时的类型推断
在TypeScript中,如果函数返回值可能是 null
或 undefined
,类型推断会将返回值类型设为包含这两个可能值的联合类型。例如:
function maybeGetSomething(): string | null | undefined {
if (Math.random() > 0.5) {
return "some string";
}
return null;
}
let result = maybeGetSomething();
// result的类型为 string | null | undefined
2. void
和 never
类型与类型推断
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. 复杂函数场景下的类型推断处理
考虑一个复杂的函数,它根据不同的条件返回不同类型的值,并且其中一些返回值可能为 null
或 undefined
。
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.name
和 user.age
时不会出现类型错误,提高了代码的健壮性和可读性。如果没有正确的类型推断,访问 null
或 undefined
的属性会导致运行时错误。