gpt4 book ai didi

typescript - Union-Type 变成 Intersection-Type

转载 作者:行者123 更新时间:2023-12-05 01:36:54 25 4
gpt4 key购买 nike

问题

我想创建一个根据给定参数提供不同功能的工厂。这可以通过条件类型来解决。

type DispatchConditional<TPayload> = TPayload extends undefined
? () => void
: (payload: TPayload) => void;

DispatchCondition 类型可以通过接口(interface)检测。

interface ActionDispatcher<TPayload> {
dispatch: DispatchConditional<TPayload>;
}

如果我根据上面的定义构建一个工厂,如果使用了 Union-Type,它将中断。不知何故,由 payloadUnion() 定义的联合类型变成了 Intersection-Type

enter image description here

问题

我必须进行哪些调整才能为支持联合类型的方法 dispatch 生成类型定义?

Playground

最佳答案

DispatchConditionaldistributed conditional type .这意味着 DispatchConditional<number | number[]>相当于DispatchConditional<number> | DispatchConditional<number[]>这反过来将是功能的联合。并且函数的联合只能通过参数类型的交集调用(因为我们不知道在运行时我们实际得到了哪个函数,所以我们必须提供与两个函数签名一起工作的参数,从而导致交集)

简单的解决方案是通过将类型参数包装在元组类型中来禁用分配行为(分配仅发生在裸类型参数上):


type DispatchConditional<TPayload> = [TPayload] extends [undefined]
? () => void
: (payload: TPayload) => void;

Playground Link

关于typescript - Union-Type 变成 Intersection-Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61598031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com