reactjs - התכונה 'filter' לא קיימת על סוג האובייקט


אני עובד עם zustand ו-TypeScript. קיבלתי את השגיאה הזו בקוד שלי

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

אני לא יודע איך לתקן את הבעיה הזו. אני יוצר אובייקט מהספרייה useStore שלי. ניסיתי להשתמש ב-'type' אבל זה מעלה את השגיאות האלה בעורך הקוד

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;

תשובה #1

אתה צריך להגדיר סוג עבור החנות שלך.

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;

תשובה #2

אני לא בטוח שזה יעבוד, נסה עם filter מסיח דעת בדרך הבאה:

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

אתה גם יכול לבדוק דיבוג של useStore עם console.log, כדי לבדוק מה מוחזר:

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

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