You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更简洁的单行代码定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:42:04