为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

将联合类型转换为交叉类型是否有方法将联合类型转换为交叉类型:type FunctionUnion = () => void | (p: string) => voidtype FunctionIntersection = () => void & (p: string) => void我想将转换应用到FunctionUnion得到FunctionIntersection
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

如果您试图将数组到一个交集中,预先映射数组将导致所产生的数组联合以获得错误的顺序。.

如果结果的交集顺序不重要,这可能并不重要,但如果这样做,上述答案将无法工作。

下面的数组最多支持9,如果需要更长的递归时间,可以手动进行扩展。

type Idx<T extends any, K extends keyof any, Yes> = T extends Record<K, any>
  ? T[K] & Yes
  : unknown

type ArrayToIntersection<T extends any[]> = Idx<T, '0', Idx<T, '1', Idx<T, '2', Idx<T, '3', Idx<T, '4', Idx<T, '5', Idx<T, '6',
 Idx<T, '7', Idx<T, '8', Idx<T, '9', unknown>>>>>>>>>>// Usage: => 1 & 2 & 3 & 4type Result = ArrayToIntersection<[1, 2, 3, 4]>


查看完整回答
反对 回复 2019-07-08
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 669 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信