将联合类型转换为交叉类型

将联合类型转换为交叉类型

是否有方法将联合类型转换为交叉类型:

type FunctionUnion = () => void | (p: string) => voidtype FunctionIntersection = () => void & (p: string) => void

我想将转换应用到FunctionUnion得到FunctionIntersection


呼唤远方
浏览 672回答 3
3回答

德玛西亚99

如果您试图将数组到一个交集中,预先映射数组将导致所产生的数组联合以获得错误的顺序。.如果结果的交集顺序不重要,这可能并不重要,但如果这样做,上述答案将无法工作。下面的数组最多支持9,如果需要更长的递归时间,可以手动进行扩展。type&nbsp;Idx<T&nbsp;extends&nbsp;any,&nbsp;K&nbsp;extends&nbsp;keyof&nbsp;any,&nbsp;Yes>&nbsp;=&nbsp;T&nbsp;extends&nbsp;Record<K,&nbsp;any> &nbsp;&nbsp;?&nbsp;T[K]&nbsp;&&nbsp;Yes &nbsp;&nbsp;:&nbsp;unknown type&nbsp;ArrayToIntersection<T&nbsp;extends&nbsp;any[]>&nbsp;=&nbsp;Idx<T,&nbsp;'0',&nbsp;Idx<T,&nbsp;'1',&nbsp;Idx<T,&nbsp;'2',&nbsp;Idx<T,&nbsp;'3',&nbsp;Idx<T,&nbsp;'4',&nbsp;Idx<T,&nbsp;'5',&nbsp;Idx<T,&nbsp;'6', &nbsp;Idx<T,&nbsp;'7',&nbsp;Idx<T,&nbsp;'8',&nbsp;Idx<T,&nbsp;'9',&nbsp;unknown>>>>>>>>>>//&nbsp;Usage:&nbsp;=>&nbsp;1&nbsp;&&nbsp;2&nbsp;&&nbsp;3&nbsp;&&nbsp;4type&nbsp;Result&nbsp;=&nbsp;ArrayToIntersection<[1,&nbsp;2,&nbsp;3,&nbsp;4]>

牛魔王的故事

我真的很难理解这个部分是如何“分配联合U并将它重新打包成一个新的联盟,其中所有的联盟都在其中。”对位“作品:(我不能完全理解这个对位部分。我以为这个密码:type Param<T> = T extends (arg: infer U) => void ? U : never;&nbsp;type InferredParams = Param<((a: string) => void) | ((a: number) => void)>;应该给我string & number但它给了我string | number..
打开App,查看更多内容
随时随地看视频慕课网APP