microsoft / microsoft/TypeScript
Regression in generic inference with JSX in v5.7+
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
🔎 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
}
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione collegata di TypeScript Playground e confronta il comportamento dell'inferenza tra le versioni 5.6.3 e 5.7.3, quindi esamina la mutazione del tipo Vue DefineProps indicata. La correzione è completa quando il parametro della callback JSX viene inferito come il valore generico letterale passato tramite name invece che come string, mentre la riproduzione rimane valida.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100