🔎 Search Terms
"type infer first argument"
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play?ts=5.5.0-dev.20240308#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXy1URBgEYAeAFQD4AKRVALngDEpMcYBPK6gSmaUAUKEiwEKdNjwEiJAEy96TVuwycuimgPjChIAB4AHThngYuRhGw7de8ALzxasAOalBAGnhv5zKKhcfI7UPoH6xqbmltZqGlqhTrQAdKluAM7MANqU3gFcALrBDqH5QuVgeOlmiKSOzgC26a7M1TCErvUA5AAWIBAQOF3eGCDV-oHFoQDe8AC+QpWo1T51ToTEZPSkfEIA9HvwR-AAegD8i1VmUPL1GwrbuwfHpxeXyzW3SU0t8G0d3T6AyGU3gswWSxWACM7nItoh5E9Dsdzu9oWtZJt5PREftkUdUWizGBYZtSLRaD9Whh2qhOk5ev1Bl1QeCkS9UZDiV9MQ9Kc1qbT6fBGcCWSEwfN2Si3kA
💻 Code
export type Factory<T> = (arg1: T, arg2: any) => any
export type Factory2<T> = (...args: [T, any]) => any
declare function infer1<T>(fn: Factory<T>): T
declare function infer2<T>(fn: Factory2<T>): T
const f1 = (msg: string = 'hello', test: any) => { }
const a1 = infer1(f1)
// ^? const a1: string | undefined
const a2 = infer2(f1)
// ^? const a2: string | undefined
const f2 = (msg: string = 'hello') => { }
const b = infer1(f2)
// ^? const b: string | undefined
const b1 = infer2(f2)
// ^? const b1: string | undefined
const c = infer1((msg: string = 'hello') => { })
// ^? const c: string
const c2 = infer2((msg: string = 'hello') => { })
// ^? const c2: string | undefined
🙁 Actual behavior
In my code you'll notice that the type of c is not the same as b, but the argument we passing into function infer1 is actually the same.
I've tested this between v5.0.4 and v5.1.6, but the type of c is different:
// v5.0.4
const c: string | undefined
// v5.1.6
const c: string
After checking v5.1 changelog, I'm still not sure what changes have been made between 5.0 to 5.1.
So I decided to submit this issue as a "Bug report".
🙂 Expected behavior
The type of c is supposed to be string | undefined.
Additional information about the issue
No response
🔎 Search Terms
"type infer first argument"
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play?ts=5.5.0-dev.20240308#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXy1URBgEYAeAFQD4AKRVALngDEpMcYBPK6gSmaUAUKEiwEKdNjwEiJAEy96TVuwycuimgPjChIAB4AHThngYuRhGw7de8ALzxasAOalBAGnhv5zKKhcfI7UPoH6xqbmltZqGlqhTrQAdKluAM7MANqU3gFcALrBDqH5QuVgeOlmiKSOzgC26a7M1TCErvUA5AAWIBAQOF3eGCDV-oHFoQDe8AC+QpWo1T51ToTEZPSkfEIA9HvwR-AAegD8i1VmUPL1GwrbuwfHpxeXyzW3SU0t8G0d3T6AyGU3gswWSxWACM7nItoh5E9Dsdzu9oWtZJt5PREftkUdUWizGBYZtSLRaD9Whh2qhOk5ev1Bl1QeCkS9UZDiV9MQ9Kc1qbT6fBGcCWSEwfN2Si3kA
💻 Code
🙁 Actual behavior
In my code you'll notice that the type of
cis not the same asb, but the argument we passing into functioninfer1is actually the same.I've tested this between v5.0.4 and v5.1.6, but the type of
cis different:After checking v5.1 changelog, I'm still not sure what changes have been made between 5.0 to 5.1.
So I decided to submit this issue as a "Bug report".
🙂 Expected behavior
The type of
cis supposed to bestring | undefined.Additional information about the issue
No response