Appearance
Typeof 类型操作符
JavaScript 已经有一个 typeof 操作符,你可以在表达式上下文中使用。
typeScript
// 输出 "string"
console.log(typeof "Hello world");
TypeScript 添加了一个 typeof 操作符,你可以在类型上下文中使用它来引用一个变量或属性的类型。
typeScript
let s = "hello";
let n: typeof s;
n = 'world'
n = 100

这对基本类型来说不是很有用,但结合其他类型操作符,你可以使用 typeof 来方便地表达许多模式。举一个例子,让我们先看看预定义的类型 ReturnType<T> 。它接收一个函数类型并产生其返回类型:
typescript
type Predicate = (x: unknown) => boolean;
type K = ReturnType<Predicate>;
如果我们试图在一个函数名上使用 ReturnType ,我们会看到一个指示性的错误。
typescript
function f() {
return { x: 10, y: 3 };
}
type P = ReturnType<f>;

请记住,值和类型并不是一回事。为了指代值 f 的类型,我们使用 typeof 。
typeScript
function f() {
return { x: 10, y: 3 };
}
type P = ReturnType<typeof f>;
TypeScript 故意限制了你可以使用 typeof 的表达式种类。
具体来说,只有在标识符(即变量名)或其属性上使用 typeof 是合法的。这有助于避免混乱的陷阱,即编写你认为是在执行的代码,但其实不是。
typeScript
// 我们认为使用 = ReturnType<typeof msgbox>
let shouldContinue: typeof msgbox("Are you sure you want to continue?");
