我一直收到错误消息:属性‘store’不存在于类型‘{}’上.在Mobx中使用Next.js时来自TypeScrip.我使用的是带有应用程序路由设置的Next.js v14.1.0.

如何在Next.js中正确定义状态存储的类型?

我的代码的补充说明,目前我的ObservableClickStore是在相同的页面(page.tsx)与Home组件.

Home是一个组件,将再次传递到Gamespage.tsx将呈现Games(我不确定这种方法是否有效,似乎是多余的.

// ./src/app/page.tsx

class ObservableClickStore {
  counter: number = 0;
  openedCards: ICard[] = [];
  clickedCards: ICard[] = [];
  nonShuffledCharacters: ICard[] = [
    { text: "Saya", answer: "I", isRevealed: false },
    // clickCard function logic. Removed to make concise...
  ]

  characters = this.nonShuffledCharacters.sort(() => Math.random() - 0.5);
  constructor() {
    makeObservable(this, {
      counter: observable,
      characters: observable,
      clickCard: action,
      toggleIsRevealed: action,
      clearClickedCards: action,
      reset: action,
    });
    autorun(() => console.log(this.report));
  }

  get report() {
    return this.characters;
  }

  toggleIsRevealed = (card: ICard) => {
    const index = this.characters.indexOf(card)
    this.characters[index].isRevealed = !this.characters[index].isRevealed;
  }

  clearClickedCards = () => {
    this.clickedCards = []
  }

  reset = () => {
    // reset function logic. Removed to make concise...
  }

  clickCard = (card: ICard) => {
    // clickCard function logic. Removed to make concise...
  }
}

const observableClickStore = new ObservableClickStore();

const Home = observer(({ store }) => {

  const backside = "🍊";
  const quizCardList = store.characters.map((character: ICard, i: number) =>
    <div className='m-1' key={i}>
      <div onClick={() => store.clickCard(character)}>
        <QuizCard revealCard={character.isRevealed} backside={backside} frontside={character.text} />
      </div>
    </div >
  )

  return (
    <>
      // render HTML...
    <>
})

const Games = () => {
  return <Home store={observableClickStore} />
}

export default Games;

推荐答案

您可以像这样告诉observer它传递给您的页面的是哪种类型的store :

const observableClickStore = new ObservableClickStore();

const Home = observer<{ store: ObservableClickStore }>(({ store }) => {
  // ...
  return <></>;
});

const Games = () => {
  return <Home store={observableClickStore} />;
};

export default Games;

Typescript相关问答推荐

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

我应该使用什么类型的React表单onsubmit事件?

Angular中的其他服务仅获取默认值

如何在TypeScrip中使用嵌套对象中的类型映射?

与字符串文字模板的结果类型匹配的打字脚本

使某些(嵌套)属性成为可选属性

对于合并对象中的可选属性(例如选项),类型推断可能是错误的

如何解决类型T不能用于索引类型{ A:typeof A; B:typeof B;. }'

如何创建一家Reduxstore ?

使用Redux Saga操作通道对操作进行排序不起作用

在类型脚本中将泛型字符串数组转换为字符串字母并集

创建依赖函数参数的类型

如何为特定参数定义子路由?

接口中可选嵌套属性的类型判断

如何在Next.js和Tailwind.css中更改悬停时的字体 colored颜色

使用RXJS获取数据的3种不同REST API

从联合提取可调用密钥时,未知类型没有调用签名

换行TypeScript';s具有泛型类型的推断数据类型

通过辅助函数获取嵌套属性时保留类型

对象可能未定义(通用)