函数的条件泛型类型被分解为类型的片段

我正在尝试编写通用条件类型。我的尝试是:

type Some<T> = T extends (...args: any[]) => any ? (p: T) => T : T | ((p: T) => T);

创建此类变量时

let v: Some<(() => void) | string | boolean>;

它的类型原来是

string | boolean | ((p: string) => string) | ((p: false) => false) | ((p: true) => true) | ((p: () => void) => () => void)

甚至boolean类型也被分解为truefalse类型。我实际上想要构建什么类型

string | boolean | ((p: string | boolean | (() => void)) => string | boolean | (() => void))

我应该怎么做?

dengfuji 回答:函数的条件泛型类型被分解为类型的片段

这是因为条件类型为distributive。我不确定无法以这种方式获取您想要的类型。但是,您可以用其他方式来描述类型,例如:

type Some<T> = Exclude<T,Function> | ((p: T) => T);

至少产生的类型看起来像您期望的类型。 Playground link

本文链接:https://www.f2er.com/3031090.html

大家都在问