属性 'filter' 在类型对象上不存在

Property 'filter' does not exist on type object

我正在使用 zustand 和打字稿。我的代码出现此错误

Property 'filter' does not exist on type 'object'.ts(2339)

我不知道如何解决这个问题。 我正在从我的 useStore 库中创建一个对象。 我试过使用 'type' 但它在代码编辑器上抛出了这些错误 error

TS

import React from "react";
import "./App.css";
import create from "zustand";

type PkState = {
    filter: "",
    pokemon: [],
  }


const useStore = create((PkState) => ({
 

  PkStateFilter: (filter) =>
    PkState((state) => ({
      ...state,
      filter,
    })),

  PkStatePokemon: (pokemon) =>
    PkState((state) => ({
      ...state,
      pokemon,
    })),
}));

//  input
const FilterInput = () => {
  const filter = useStore((state) => state.filter);
  const PkStateFilter = useStore((state) => state.PkStateFilter);
  return (  <input value={filter}  onChange=((evt)=>PkStateFilter(evt.target.value))  />
  )
  


};

function App() {
  return <div className="App"></div>;
}

export default App;

您需要为您的商店定义类型。

import React from "react";
import "./App.css";
import create from "zustand";

type State = {
  filter: string;
  pokemon: Array<string>;
  setFilter: (filter: string) => void;
  setPokemon: (pokemon: Array<string>) => void;
};

// You have to use the type here
const useStore = create<State>((set) => ({
  filter: "", // set initial values here
  pokemon: [],

  setFilter: (filter) =>
    set((state) => ({
      ...state,
      filter
    })),

  setPokemon: (pokemon) =>
    set((state) => ({
      ...state,
      pokemon
    }))
}));

//  input
const FilterInput = () => {
  const filter = useStore((state) => state.filter);
  const setFilter = useStore((state) => state.setFilter);
  return (
    <input value={filter} onChange={(evt) => setFilter(evt.target.value)} />
  );
};

function App() {
  return (
    <div className="App">
    </div>
  );
}

export default App;

我不确定这是否有效,请尝试在下一个方法中分散注意力 filter

 const { filter } = useStore((state) => state);

您还可以使用 console.log 调试 useStore,以检查返回的内容:

 const returnedState = useStore((state) => state);

 // Check does `filter` exists in state
 console.warn('returnedState', returnedState);