Skip to content
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

Typeof 类型运算符

typeof 类型运算符

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

ts
// 打印 "string"
console
.
log
(typeof "Hello world");
Try

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

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

这对于基本类型来说并不是很有用,但与其他类型运算符结合使用时,你可以使用 typeof 方便地表达许多模式。 举个例子,让我们从预定义类型 ReturnType<T> 开始。 它接受一个函数类型并生成其返回类型:

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

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

ts
function 
f
() {
return {
x
: 10,
y
: 3 };
} type
P
=
ReturnType
<f>;
'f' refers to a value, but is being used as a type here. Did you mean 'typeof f'?
Try

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

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

限制

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

具体来说,仅允许在标识符(即变量名)或其属性上使用 typeof。 这有助于避免编写你认为会执行但实际上不会执行的代码所带来的困惑陷阱:

ts
// 本意是使用 = ReturnType<typeof msgbox>
let 
shouldContinue
: typeof
msgbox
("Are you sure you want to continue?");
',' expected.
Try