-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Open
Labels
Possible ImprovementThe current behavior isn't wrong, but it's possible to see that it might be better in some casesThe current behavior isn't wrong, but it's possible to see that it might be better in some cases
Milestone
Description
π Search Terms
inference generic signature type parameters low priority
π Version & Regression Information
- This is the behavior in every version I tried
β― Playground Link
π» Code
declare function defineComponent<Props extends Record<string, any>>(
setup: (props: Props) => void,
options?: {
props?: (keyof Props)[];
},
): (props: Props) => unknown;
const res1 = defineComponent(
<T extends string>(_props: { msg: T }) => {
return () => {};
}
);
res1
// ^? const res1: <T extends string>(props: { msg: T; }) => unknown
const res2 = defineComponent(
<T extends string>(_props: { msg: T }) => {
return () => {};
},
{
props: ["msg"],
},
);
res2
// ^? const res2: (props: { msg: any; }) => unknown
π Actual behavior
A low-priority inference made from keyof Props
prevents inference from the generic signature
π Expected behavior
I'd expect both of those to infer the same result: <T extends string>(props: { msg: T; }) => unknown
Additional information about the issue
There is an existential question to be asked here... what is a low-priority inference in the first place? :P Where is the line? Should every inference priority other than InferencePriority.None
be treated as low-priority here?
Metadata
Metadata
Assignees
Labels
Possible ImprovementThe current behavior isn't wrong, but it's possible to see that it might be better in some casesThe current behavior isn't wrong, but it's possible to see that it might be better in some cases