这两个操作符让你从现有的类型和值推导出新的类型——这是类型级编程的基础。
keyof — 对象类型键的联合
ts
interface User { id: number; name: string; }
type UserKey = keyof User; // "id" | "name"
typeof — 值的类型
ts
config = { : , : };
= config;
这两个操作符让你从现有的类型和值推导出新的类型——这是类型级编程的基础。
interface User { id: number; name: string; }
type UserKey = keyof User; // "id" | "name"
config = { : , : };
= config;
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠typeof(在类型位置)捕获运行时值的推导类型,所以你不必单独写出该类型。
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { id: 1, name: "Ann" };
getProp(user, "name"); // returns string
getProp(user, "age"); // ❌ Error: "age" is not a key of user
这里 K extends keyof T 将 key 限制在真实的键上,T[K](一个索引访问类型)给出该键的精确值类型。拼写错误会变成编译错误。
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
keyof 和 typeof 连接了值的世界和类型的世界。
它们支持类型安全的属性访问、从配置/常量推导类型(单一真实来源),并且是映射类型和条件类型的构建块。
它们能让你避免手动维护并行的类型定义。