# Typeof 类型运算符

JavaScript 已经有一个可以在表达式上下文中使用的 typeof运算符:

// Prints "string"
console.log(typeof "Hello world");

TypeScript 添加了一个 typeof运算符,您可以在类型上下文中使用它来引用变量或属性的类型:

let s = "hello";
let n: typeof s;

这对于基本类型不是很有用,但结合其他类型运算符,您可以使用 typeof方便地表达许多模式。例如,让我们从查看预定义类型 ReturnType<T&gt;开始。它接受一个函数类型并产生它的返回类型:

type Predicate = (x: unknown) => boolean;
type K = ReturnType<Predicate>;

如果我们尝试在函数名上使用 ReturnType,我们会看到一个指导性错误:

function f() {
  return { x: 10, y: 3 };
}
type P = ReturnType<f>;

请记住,值和类型不是一回事。要引用值 f所具有的类型,我们使用 typeof

function f() {
  return { x: 10, y: 3 };
}
type P = ReturnType<typeof f>;

# 限制

TypeScript 有意限制您可以使用 typeof的表达式类型。

具体来说,在标识符(即变量名)或其属性上使用 typeof是唯一合法的。这有助于避免编写您认为正在执行但不是的代码的混乱陷阱:

declare const msgbox: () => boolean;
// type msgbox = any;
// Meant to use = ReturnType<typeof msgbox>
let shouldContinue: typeof msgbox("Are you sure you want to continue?");
Last Updated: 5/25/2023, 2:35:11 PM