`makePersisted()` cannot correctly infer types under Typescript 7

Aperta
#1,000 3 commenti 5 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
typescript

Direzione di ricerca

Inizia dal punto di ingresso makePersisted e riproduci il fallimento dell’inferenza del tipo da src/App.tsx usando l’esempio StackBlitz collegato. Esegui tsc --noEmit con la chiamata createSignal("hello") e confrontala con la versione con generico esplicito. Il lavoro è completato quando la chiamata con inferenza dei tipi supera il controllo dei tipi senza richiedere tipi espliciti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Describe the bug
const [thing, setThing] = makePersisted(createSignal("hello"), {
    name: "thing",
    storage: localStorage,
});
> tsc --noEmit

src/App.tsx(8,43): error TS2769: No overload matches this call.
  The last overload gave the following error.
    Argument of type 'Signal<string>' is not assignable to parameter of type 'Signal<unknown> | [unknown, SetStoreFunction<unknown>]'.
      Type '[get: Accessor<string>, set: Setter<string>]' is not assignable to type 'Signal<unknown>'.
        Type at position 1 in source is not compatible with type at position 1 in target.
          Type 'Setter<string>' is not assignable to type 'Setter<unknown>'.
            Target signature provides too few arguments. Expected 1 or more, but got 0.

Currently, the only way to fix it seems to be to provide full, explicit types:

const [thing, setThing] = makePersisted<string, Signal<string>>(createSignal("hello"), {
    name: "thing",
    storage: localStorage,
});
Minimal Reproduction Link

https://stackblitz.com/edit/github-ojctyhmm

Lingua principale
TypeScript
Stelle
1.6k
Fork
162
Merge medio
19h 40m
PR unite (30g)
8

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di solidjs-community/solid-primitives

Tutte le issue di solidjs-community/solid-primitives

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.