是否可以在 Typescript 中根据函数类型编写条件类型?
我们可以基于对象接口实现条件类型,但想知道我们是否可以对函数类型执行相同的操作。
类似于以下内容:
type func<T> = (val: any) => T
type Optional<T> = (val: any) => T | undefined
type FilterOptional<T> = T extends Optional<any> ? undefined : T
type a = FilterOptional<(val: any) => number>
// a is undefined but need it to be (val: any) => number
答案 0 :(得分:1)
如果您打算在返回类型包含 undefined
时返回 undefined
,那么您可以尝试这样做:
type FilterOptional<T extends (...args: any) => any> = undefined extends ReturnType<T> ? undefined : T
type a = FilterOptional<(val: any) => number> // (val: any) => number
type b = FilterOptional<(val: any) => number | undefined> // undefined
答案 1 :(得分:0)
你当然可以。
事实上,您的代码无需修改即可运行。我将添加一些示例:
type func<T> = (val: unknown) => T
type foo<T> = T extends func<any> ? T : undefined // some other types
// Take positive conditional branch
type A = foo<() => void> // () => void
type B = foo<(val: number) => void> // (val: number) => void
// Take negative conditional branch
type C = foo<(val: number, secondArg: string) => void> // undefined
type D = foo<number> // undefined