如何修改下面的类型声明以符合要求?

interface State {
  status: Status;
  sourceXPath: string;
  sourceXPathTimeout: number;
  targetLink: string;
}
settingsStorage.watch((newValue) => {
  if (newValue) {
    useSettingsStore.dispatch({
      type: 'update',
      update(draftState) {
        const state = newValue.state;
        Object.keys(state).forEach((key) => {
          // @ts-expect-error
          draftState[key as keyof State] = state[key as keyof State];
        });
      },
    });
  }
});
type Draft<T> = T extends PrimitiveType ? T : T extends AtomicObject ? T : T extends ReadonlyMap<infer K, infer V> ? Map<Draft<K>, Draft<V>> : T extends ReadonlySet<infer V> ? Set<Draft<V>> : T extends WeakReferences ? T : T extends object ? WritableDraft<T> : T;

type WritableDraft<T> = {
    -readonly [K in keyof T]: Draft<T[K]>;
};

draftState 是一个 Draft<State> 对象,是 immer 中的草稿对象。其 key 和 State 的 key 是一一对应的。
目前是使用 // @ts-expect-error 来抑制类型错误,应该怎么对 key 设置类型,才能避免类型错误?

AI 的答案是使用

interface State {
  // 定义你的 State 结构
  [key: string]: any;
}

但是这样会抹掉 State 的所有的类型信息

阅读 491
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏