Issue to index generic record with generic key value in recipe due to draft wrapper
Les mainteneurs répondent en général sous 4 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 42/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- typescript
- Domaine
- developer-experience
Piste de recherche
Commencez par le CodeSandbox lié dans src/index.ts et reproduisez l’erreur sur l’affectation draft[foo] avec Immer v10.1.1. Suivez les types TypeScript impliqués dans produce, Draft et le Record générique readonly. Le travail est terminé lorsque l’exemple de Record générique readonly passe la vérification de type sans cast manuel, tout en préservant le comportement attendu de produce.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🐛 Bug Report
Using generic function arguments around produce causes type issues. Its probably best explained with an example (link to CodeSandbox below):
enum Foo {
One,
Two,
}
type Bar<F extends Foo> = Readonly<Record<F, number>>;
function modifyBar<F extends Foo>(bar: Bar<F>, foo: F, value: number): Bar<F> {
return produce(bar, (draft) => {
draft[foo] = value; // <-- Issue here
});
}
The type error at the marked line is then: Type 'F' cannot be used to index type 'Draft<Readonly<Record<F, number>>>'.
A current workaround is to make the type Bar actually mutable (i.e. remove the Readonly wrapper) and then manually cast the recipe like (draft: Bar<F>) => { /* ... */ }. Both do not feel good or are not possible for the production circumstances.
Are there any alternatives to solve this properly?
Link to repro
To Reproduce
Just inspect the error shown in the code editor.
Observed behavior
Type error that correct key type can't be used to index a Record wrapped as Draft.
Expected behavior
No type error and the produce just works as without a recipe.
Environment
We only accept bug reports against the latest Immer version.
- Immer version:
v10.1.1 - I filed this report against the latest version of Immer
- Occurs with
setUseProxies(true)(I don't know how to apply this, sorry) - Occurs with
setUseProxies(false)(ES5 only)
- Langage dominant
- JavaScript
- Étoiles
- 29k
- Forks
- 905
- Merge moyen
- 3 j 16 h
- PR mergées (30 j)
- 22
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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.
Autres issues de immerjs/immer
-
Shrinking an array with `length =` and growing it back loses the patches for the truncated indicesPeut-être pris @RClaudiuM l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 4 jours
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 4 jours
-
Docs: Chinese (zh-CN) website translation is outdated vs English docsPeut-être à nouveau libre @lijiayou0728 l’a pris il y a 91 jours, et aucune pull request n’est ouverte. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
immerjs/immer#1242 · 5 commentaires ·
Les mainteneurs répondent en général sous 4 jours
-
Branding Drafts on Type levelOuvertequestion
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 4 jours
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
immerjs/immer#1217 · 1 commentaire ·
Les mainteneurs répondent en général sous 4 jours
Toutes les issues de immerjs/immer
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Automattic/node-canvas#2633 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
capricorn86/happy-dom#2594 ·
Les mainteneurs répondent en général sous 1 jour
-
Decoding tag 1 (epoch date) with an 8-byte integer throws "Cannot mix BigInt and other types"Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
microsoft/monaco-editor#5575 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour