reactjs - Hvordan passer man et generisk interface til zustand create-opkald i TypeScript?


så jeg har kæmpet med at finde et svar på, hvad der er den korrekte syntaks for at videregive et generisk interface, når man kalder en funktion, der tager en generisk type.

Det, jeg vil gøre, er const data=itemStore<T>(state => state.data)

import { create } from "zustand";

interface Item<T> {
  count: number
  data: T
}

const itemStore = create<Item<T>>()((set) => ({
  count: 1,
  data: "generic"
})

Svar #1

Kom tilbage fra eksilet, her er dit svar, min ven:

// store file
type BaseStore<T> = {
  items: T;
};

const INITIAL_ITEMS_DATA: BaseStore<{}>['items'] = {};

const useDataImplementation = create<BaseStore<{}>>((set) => ({
  items: INITIAL_ITEMS_DATA,
}));

export const useStore = useDataImplementation as {
  <T>(): BaseStore<T>;
  <T, U>(selector: (s: BaseStore<T>) => U): U;
};

// Then when you call this thing you need to only pass your interface/type:
interface Item {
  name: string;
  price: string;
  stock: boolean;
}
const store = useStore<Item>();

Med dette vil du have dit item pænt og stærkt typet, så vi bekræfter typerne ved at få dem til at slags lyve.

Relaterede artikler