Typescript:试图使用[k: string]提取一个嵌套在另一个类型中的复杂类型



我希望提取一个嵌套在预定义对象类型中的复杂类型。


// 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

看到操场

相关内容

  • 没有找到相关文章

最新更新