我有一个像这样的对象
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
,这将部分解决我的问题但也会检查值的类型。
所以我的问题是,是否有可能仅手动类型化对象的值?或者是否有其他解决方案?