如何在TypeScript中传递泛型接口给zustand create调用?

wztqucjr  于 2023-05-08  发布在  TypeScript
关注(0)|答案(1)|浏览(180)

所以我一直在努力寻找一个答案,当调用一个接受泛型类型的函数时,什么是正确的语法来传递泛型接口给a。
我想做的是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"
})
hl0ma9xz

hl0ma9xz1#

从流放地回来,这里是你的答案我的朋友:

// 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>();

有了这个,你就可以很好地和强类型化item了,所以,我们通过让它们有点说谎来Assert类型。

相关问题