-
Notifications
You must be signed in to change notification settings - Fork 13k
Closed
Closed
Copy link
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue
Milestone
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.
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue