我希望提取一个嵌套在预定义对象类型中的复杂类型。
// The 'events?' property is an extensive definition I would like to extract and use independently
type EventsCollection = { [k: string]: { name: string, events?: ComplexDefinition, desc: string }}
我尝试了许多方法来完成这个任务,大多数都与这些相似,但到目前为止都没有成功。
type Events = { [P in keyof EventsCollection ]: EventsCollection[P] }
// and
type Events = { [P in keyof EventsCollection ]: EventsCollection[P]['events'] }
//and
type key = 'events'
type Events = { [P in keyof EventsCollection ]: Required<EventsCollection[P][key]> }
你知道我该怎么做吗?
您可以使用任何keyof EventsCollection
(即任何string
)被定义为在EventsCollection
中具有相同的值类型的事实。然后,您可以使用该类型的任何键来选择内部类型的已知events
键。
type Events = Required<EventsCollection[keyof EventsCollection]>["events"];
在操场上看
我觉得你有点太努力了。您不需要映射类型。
type Test = NonNullable<EventsCollection[string]['events']>
您只需钻入[]
,直到您得到ComplexDefinition | undefined
,然后将其包裹在NonNullable
中以删除undefined
。
看到操场