0

在 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
4

2 回答 2

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
于 2021-06-22T09:17:33.007 回答
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

操场

于 2021-06-22T06:40:37.063 回答