interview
typescript-frontend
TypeScript 的类型操作符 typeof 有什么作用

前端 TypeScript 面试题, TypeScript 的类型操作符 typeof 有什么作用?

前端 TypeScript 面试题, TypeScript 的类型操作符 typeof 有什么作用?

QA

Step 1

Q:: TypeScript 的类型操作符 typeof 有什么作用?

A:: typeof 是 TypeScript 中用于获取变量或表达式的类型信息的操作符。在 TypeScript 中,typeof 可以用在类型上下文中(例如类型注解)以推断某个值的类型。通过使用 typeof,我们可以编写出更加灵活和通用的代码,特别是在类型较为复杂或无法提前确定类型的情况下。例如:

 
let value = 'hello';
type ValueType = typeof value; // ValueType 为 'string'
 

在这个例子中,typeof value 将返回 string,因此 ValueType 被推断为 string 类型。

Step 2

Q:: 如何使用 typeof 进行类型保护?

A:: typeof 操作符不仅可以在类型注解中使用,还可以在运行时进行类型保护。typeof 返回一个字符串,表示一个变量的类型,可以根据这个返回值对变量进行类型判断,从而实现类型保护。例如:

 
function padLeft(value: string | number, padding: string | number) {
  if (typeof padding === 'number') {
    return Array(padding + 1).join(' ') + value;
  }
  if (typeof padding === 'string') {
    return padding + value;
  }
  throw new Error(`Expected string or number, but got ${typeof padding}.`);
}
 

在这个函数中,我们通过 typeof padding 来判断 paddingstring 还是 number,从而在编译时确保代码的安全性。

Step 3

Q:: typeofinstanceof 有什么区别?

A:: typeofinstanceof 是两种不同的操作符,分别用于不同的场景。typeof 是一个操作符,返回一个字符串,表示一个变量的类型。它主要用于判断原始数据类型(如 stringnumberboolean 等)和函数类型。

instanceof 用于检测对象的具体类型。它通过判断对象的原型链是否包含构造函数的 prototype 属性来确定对象是否是某个类的实例。例如:

 
class Person {}
let person = new Person();
console.log(person instanceof Person); // true
 

因此,typeof 主要用于判断基础类型,而 instanceof 主要用于判断对象类型。

用途

在 TypeScript 的实际开发中,类型安全性是保证代码健壮性的重要因素。`typeof` 操作符在类型推断和类型保护中起到了重要作用,通过正确地使用 `typeof`,开发者可以确保在不同类型的数据之间进行安全的操作,减少运行时错误的发生。在开发过程中,`typeof` 常用于处理参数类型不确定的函数、通用函数库、类型安全的 API 接口等场景。其主要目的在于增强代码的可维护性和可读性,使得 TypeScript 的类型系统能够更好地发挥作用。\n

相关问题

🦆
TypeScript 的 keyof 操作符是什么?如何使用?

keyof 是 TypeScript 中的一个类型操作符,它用于获取某个对象类型的所有键的联合类型。比如,给定一个对象类型 { name: string; age: number; }keyof 操作符会返回 'name' | 'age'。这在泛型编程中尤其有用,能够让我们在类型安全的前提下操作对象的键。例如:

 
type Person = { name: string; age: number; };
type PersonKeys = keyof Person; // 'name' | 'age'
 
🦆
如何在 TypeScript 中使用 infer 进行类型推断?

infer 是 TypeScript 中用于在条件类型中推断类型的一种关键字。它允许我们在条件类型中提取和使用特定的类型信息。通常与 extends 关键字结合使用,用于从复杂类型中提取子类型。例如:

 
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
 

在这个例子中,infer R 表示推断函数的返回类型。ReturnType 类型别名根据输入类型 T 推断其返回类型 R

🦆
如何使用 TypeScript 的 as const 断言?

as const 是 TypeScript 中的一种常量断言,可以将一个表达式的类型转换为更加字面化的类型。通常用于将对象或数组中的元素类型提升为字面量类型,而非宽泛的基础类型。例如:

 
let person = { name: 'John', age: 30 } as const;
// person 的类型为 { readonly name: 'John'; readonly age: 30 }
 

这样可以确保对象或数组的元素类型不会被更改,提供更强的类型安全性。