Closed
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
enum Thing { a = 'a', b = 'b', };
function f(
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'.
});
}
export function select<KeyT extends string>(props: SelectProps<KeyT>): void {
throw new Error('hello');
}
export type SelectProps<KeyT extends string> = {
onChange: (key: KeyT) => void;
options?: SelectOptions<KeyT>; // <-- Remove the `?` and the error goes away.
};
export type SelectOptions<KeyT extends string> =
// Comment either of the below union members out and the error goes away.
| Array<{key: KeyT}>
| Array<KeyT>;
π Actual behavior
- Got a type error; see "ERROR" comment above. Looks like the type argument to
select(...)
is being inferred incorrectly. - 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.