microsoft / microsoft/TypeScript
Regression in generic inference with JSX in v5.7+
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
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
}
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction TypeScript Playground liée et comparez le comportement de l’inférence entre les versions 5.6.3 et 5.7.3, puis examinez la mutation de type Vue DefineProps référencée. La correction est terminée lorsque le paramètre du callback JSX est inféré comme la valeur générique littérale transmise via name plutôt que comme string, tout en maintenant la validité de la reproduction.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100