typeof(类型查询)定义:在类型上下文中,获取一个变量或常量的静态类型。
语法:
const foo = { x: 1, y: "hi" };
type FooType = typeof foo;
// 等价于: { x: number; y: string }
用途:
as const 提取字面量类型。keyof(键类型查询)定义:对一个对象类型 T,返回其所有属性名组成的联合类型。
语法:
type Point = { x: number; y: number; };
type PointKeys = keyof Point;
// 等同于: "x" | "y"
用途:
定义:取出类型 T 中某个属性 K 的类型,写作 T[K]。
语法:
interface User { id: number; name: string; }
type NameType = User["name"]; // string
注意:K 必须是 keyof T 的子集,否则会报错。
keyof typeof 组合定义:先通过 typeof 得到某个值的类型,再用 keyof 提取其属性名联合。
语法 & 示例:
const Roles = {
admin: 0,
user: 1,
guest: 2,
} as const;
// typeof Roles => { readonly admin: 0; readonly user: 1; readonly guest: 2 }
// keyof typeof Roles => "admin" | "user" | "guest"
type RoleKey = keyof typeof Roles;
in