-
Notifications
You must be signed in to change notification settings - Fork 13k
Open
Labels
Help WantedYou can do thisYou can do thisPossible 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
tsx generic
π Version & Regression Information
- This changed between versions 5.6.3 and 5.7.3
β― Playground Link
π» Code
import { defineProps as vueDefineProps } from 'vue';
declare const Comp: {
new <__VERTER__TS__T extends string = ''>(): {
$props: defineProps<__VERTER__TS__T>
};
}
(
<Comp name="foo"
onName={e => {
// @ts-expect-error this should never happen
if (e !== 'dd') {
}
}} />
);
; function TemplateBindingFN<T extends string>() {
const Props = vueDefineProps<{
name: T;
onName: (n: T) => void;
}>()
return { defineProps: Props as typeof Props }
};
export type defineProps<T extends string> = ReturnType<typeof TemplateBindingFN<T>>['defineProps']
π Actual behavior
In later version the onName
argument does not get the generic information resolved, defaulting to string
, earlier versions 5.x infer e
as 'foo'
π Expected behavior
e
should be implicitly inferred based on the generic passed in name
Additional information about the issue
It seems to be caused by the type mutation of DefineProps
export type DefineProps<T, BKeys extends keyof T> = Readonly<T> & {
readonly [K in BKeys]-?: boolean
}
Metadata
Metadata
Assignees
Labels
Help WantedYou can do thisYou can do thisPossible 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