microsoft / microsoft/TypeScript
type inference issue with dynamic template literals
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
🔎 Search Terms
"template literals and type inference", "type inference with dynamic template literals"
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about it
⏯ Playground Link
💻 Code
type Api = {
[key: `hello.${string}`]: (data: { name: string }) => void
}
let userId: string = 'dynamic string'
// Example1: Doesn't work. type for `e` can't be inferred
const test1: Api = {
[`hello.${userId}`]: e => {
console.log(e.name)
},
}
// Example2: Works
const test2: Api = {
[`hello.static_string`]: e => {
console.log(e.name)
},
}
// Example3: Works
const on = <K extends keyof Api>(
key: K,
action: (data: Api[K]) => void,
) => {
// some logic
}
on(`hello.${userId}`, e => {
console.log(e.name)
})
🙁 Actual behavior
Example 1 doesn't work, while Example 2 and Example 3 works properly. The type for e can't be inferred
🙂 Expected behavior
To infer type of e in the Example 1.
Additional information about the issue
No response
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 le TypeScript Playground lié et reproduisez le contraste entre les trois exemples, en particulier le typage contextuel de la propriété dynamique de template literal dans Example 1. Comparez le type inféré de e avec les cas de clé statique et de fonction générique ; c’est terminé lorsque Example 1 infère e comme le type de paramètre affiché { name: string }.
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
- 42/100