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

Open
#1,000 3 comments 5 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
55/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
typescript

Research direction

Start at the makePersisted entry point and reproduce the inferred-type failure from src/App.tsx using the linked StackBlitz example. Run tsc --noEmit with the createSignal("hello") call and compare it with the explicit generic version. Done means the inferred call type-checks without requiring explicit types.

Written by the indexing model from the issue text.

Description

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

Dominant language
TypeScript
Stars
1.6k
Forks
162
Avg merge
19h 40m
Merged PRs (30d)
8

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from solidjs-community/solid-primitives

All issues in solidjs-community/solid-primitives

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.