keyof typeof
在 TypeScript 中是一个非常有用的语法,它可以帮助我们获取一个对象或类中所有公共属性的联合类型。使得我们可以对对象的键进行类型安全的引用。
具体来说:
typeof
用于获取一个变量或对象的类型。keyof
用于获取某种类型的所有键的联合。
组合在一起使用 keyof typeof
就是先通过 typeof
取得一个实体的类型,然后通过 keyof
获取这个类型所有键的集合。
例如,考虑以下代码:
typescriptconst config = { host: 'localhost', port: 12345, name: 'server1' }; type ConfigKeys = keyof typeof config;
在这里,typeof config
是 { host: string; port: number; name: string }
,而 keyof typeof config
就是 'host' | 'port' | 'name'
。这样 ConfigKeys
类型就代表了 config
中所有键的联合类型。
这种方式非常有用,尤其是在需要确保不会对对象的属性名称进行硬编码时。例如,如果需要编写一个函数来读取配置对象的任意属性,可以这样做:
typescriptfunction getConfigValue(key: ConfigKeys): string | number { return config[key]; } // 正确使用 const port = getConfigValue('port'); // 类型安全,返回类型为 number // 如果尝试使用不正确的键,TypeScript编译器将给出错误提示 const unknown = getConfigValue('unknown'); // 错误:类型“"unknown"”的参数不能赋给类型“"host" | "port" | "name"”的参数。
这样,我们在代码中引用 config
的任何键时都有了类型安全的保障,任何非法的键名在编译阶段就会被捕捉到。
2024年8月2日 14:10 回复