如何用更简洁的单行代码定义adminRoutes的值类型?
问题描述
我有一个存储路由路径的对象:
const adminRoutes = { users: "/admin/users", organizations: "/admin/organizations", }
我需要在如下数组中指定adminRoutes的值类型:
interface IAdminRoutesList { path: TAdminRoutesValues; element: JSX.Element; } const adminList: IAdminRoutesList[] = [ { path: adminRoutes.users, element: <Users /> }, ];
目前我找到的实现方式是:
type TAdminRoutesKeys = keyof typeof adminRoutes; type TAdminRoutesValues = (typeof adminRoutes)[TAdminRoutesKeys];
请问是否有更优雅的方式,用单行代码实现相同效果?
解决方案
可以直接将两步合并为一行代码,实现完全相同的效果:
type TAdminRoutesValues = (typeof adminRoutes)[keyof typeof adminRoutes];
这个单行写法和你原来的实现逻辑完全一致:先通过keyof typeof adminRoutes获取对象的所有键类型,再用该键类型索引原对象的类型,最终得到所有值的联合类型,只是把拆分的两步合并成了更简洁的单行形式。
如果你的TypeScript版本在4.9及以上,还可以用satisfies运算符在定义adminRoutes时做类型约束,但如果只是单纯想要单行获取值类型,上面的写法已经足够简洁优雅。
内容的提问来源于stack exchange,提问作者Cyril Zlachevsky
相关产品推荐
相关产品推荐

