Skip to content

Inference regression (5.0.4 vs 4.9.5) with nullable enum function parameter #54005

Description

Bug Report

🔎 Search Terms

inference string null function parameter

🕗 Version & Regression Information

  • This changed between versions 4.9.5 and 5.0.4

⏯ Playground Link

Playground link with relevant code

💻 Code

enumThing{a='a',b='b',};functionf(registrationStatusOptions: SelectOptions<Thing>,onChange: (status: Thing|null)=>void,// <-- Remove the `| null` and the error goes away.): void{select({// <-- Add an explicit type argument `Thing` and the error goes away.options: registrationStatusOptions,onChange: onChange,// ERROR in v5.0.4 but not in v4.9.5: Type '(status: Thing | null) => void' is not assignable to type '(key: string) => void'.});}exportfunctionselect<KeyTextendsstring>(props: SelectProps<KeyT>): void{thrownewError('hello');}exporttypeSelectProps<KeyTextendsstring>={onChange: (key: KeyT)=>void;options?: SelectOptions<KeyT>;// <-- Remove the `?` and the error goes away.};exporttypeSelectOptions<KeyTextendsstring>=// Comment either of the below union members out and the error goes away.|Array<{key: KeyT}>|Array<KeyT>;

🙁 Actual behavior

  1. Got a type error; see "ERROR" comment above. Looks like the type argument to select(...) is being inferred incorrectly.
  2. Minor perturbations of the code cause the error to go away; see other comments above.

This was extracted from some React UI code.

🙂 Expected behavior

TypeScript 4.9.5 infers the type argument I wanted. I was hoping TypeScript 5.0.4 would do the same.

Metadata

Metadata

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions