如何推断函数参数的类型?
How to infer type for arguments for function?
我有一个这样的类型声明来排除 return 联合类型:
export type ExcludeReturnType<T extends (...args: any[]) => any, R> = (...args: any) => Exclude<ReturnType<T>, R>
type Orig = (a: number) => string | void
type Result = ExcludeReturnType<Orig, void> // (...args: any[]) => string
type Expected = (a: number) => string
但是现在它只会将所有参数变成any[]
。如何保留原始函数的类型?
使用 Parameters
实用程序类型:
export type ExcludeReturnType<T extends (...args: any[]) => any, R> =
(...args: Parameters<T>) => Exclude<ReturnType<T>, R>
type Orig = (a: number, b: string) => string | void
type Result = ExcludeReturnType<Orig, void>
// type Result = (a: number, b: string) => string
我有一个这样的类型声明来排除 return 联合类型:
export type ExcludeReturnType<T extends (...args: any[]) => any, R> = (...args: any) => Exclude<ReturnType<T>, R>
type Orig = (a: number) => string | void
type Result = ExcludeReturnType<Orig, void> // (...args: any[]) => string
type Expected = (a: number) => string
但是现在它只会将所有参数变成any[]
。如何保留原始函数的类型?
使用 Parameters
实用程序类型:
export type ExcludeReturnType<T extends (...args: any[]) => any, R> =
(...args: Parameters<T>) => Exclude<ReturnType<T>, R>
type Orig = (a: number, b: string) => string | void
type Result = ExcludeReturnType<Orig, void>
// type Result = (a: number, b: string) => string