拿走不谢 type Opts = TMap[T]['param'] extends never ? [opts?: { query?: TMap[T]['query'] }] : [opts: { param: TMap[T]['param']; query?: TMap[T]['query'] }] function get(api: T, ...args: Opts): TMap[T]['data'] { // TODO throw 'Unimplented' } 也可以使用函数重载,一个对外强制类型,一个对内稍微宽松一些 function get(api: T, ...args: Opts): TMap[T]['data']; function get(api: Api, opts: {param?: object, query?: object} = {}): any { // TODO throw 'Unimplented' }