类型查询

typeofJavaScript 语言中的一个一元运算符,它能够获取操作数的数据类型。例如,当对一个字符串使用该运算符时,将返回固定的值 'string'。示例如下:

typeof 'foo'; // 'string'

TypeScriptJavaScript 中的 typeof 运算符进行了扩展,使其能够在表示类型的位置上使用。当在表示类型的位置上使用 typeof 运算符时,它能够获取操作数的类型,我们称之为类型查询。类型查询的语法如下所示:

typeof TypeQueryExpression

在该语法中,typeof 是关键字;TypeQueryExpression 是类型查询的操作数,它必须为一个标识符或者为使用点号 . 分隔的多个标识符。示例如下:

const a = { x: 0 };
function b(x: string, y: number): boolean {
    return true;
}

type T0 = typeof a;   // { x: number }
type T1 = typeof a.x; // number
type T2 = typeof b;   // (x: string, y: number) => boolean

此例中,对常量 a 进行类型查询的结果为对象类型,在该对象类型中包含一个 number 类型的属性成员 x;对函数声明 b 进行类型查询的结果为函数类型,该函数类型接受两个 string 类型和 number 类型的参数并返回 boolean 类型的值。

在前面的章节中,我们介绍了特殊的 unique symbol 类型。每一个 unique symbol 类型都是唯一的,TypeScript 只允许使用 const 声明或 readonly 属性声明来定义 unique symbol 类型的值。若想要获取特定的 unique symbol 值的类型,则需要使用 typeof 类型查询,否则将无法引用其类型。示例如下:

const a: unique symbol = Symbol();

const b: typeof a = a;