【发布时间】:2021-09-27 15:05:04
【问题描述】:
我有一个类似的对象
interface PageDef = {url: string}
const page1Def: PageDef = {url: "page1"}
const page2Def: PageDef = {url: "page2"}
const pages = {page1: page1Def, page2: page2Def}
现在我希望页面类型如下:
{{page1: PageDef, page2: PageDef}}
问题是该页面可以有任何名称,例如我可以有
const pages = {home: page1Def, about: page2Def}
我不想使用以下任何一种,因为我会丢失类型中的键
const pages: {[pageName: string]: PageDef} = {page1: page1Def, page2: page2Def}
const pages: Record<string, PageDef> = {page1: page1Def, page2: page2Def}
我无法执行以下操作来获得联合类型的页面名称
keyof typeof pages
// would be string with above definition
不输入会使 Typescript 动态输入 pages,这将部分解决我的问题,但会输入检查值。
所以我的问题是,是否可以仅手动键入对象的值?还是有其他解决办法?
【问题讨论】:
-
这听起来像是一个设计问题。你真的需要这个来实现你的真正目标吗?
-
我有这两个变量,一个定义页面的对象和一个定义页面显示顺序的数组,我需要后者有有效的页面键,为此我需要输入它
-
键入它不是验证它的唯一方法。
标签: typescript