我正在学习如何在一个工作示例中使用 createEntityAdapter,但我无法selectId
正确解析 for Update 函数。
工作沙箱:https ://codesandbox.io/s/createentityadapter-demo-forked-5rvl4
entityAdapter 被初始化为:
const entityAdapter = createEntityAdapter<Book>({
selectId: (book) => book.bookId,
sortComparer: (a, b) => a.title.localeCompare(b.title)
});
添加值可以正常工作:
const stateOne = entityAdapter.addOne(initialState, {
bookId: 1,
title: "hello"
});
const stateTwo = entityAdapter.addMany(stateOne, [
{ bookId: 2, title: "two" },
{ bookId: 3, title: "three" },
{ bookId: 4, title: "four" }
]);
然而 updateOne 在 bookId 上给出了类型错误:
const stateThree = entityAdapter.updateOne(stateTwo, {
bookId: 3,
changes: {
title: "three - change"
}
});
TS错误:
(property) bookId: number 没有重载匹配这个调用。重载 1 of 2,“(状态:EntityState,更新:更新):EntityState”,给出了以下错误。'{ bookId: number; 类型的参数 更改:{标题:字符串;}; }' 不可分配给“更新”类型的参数。对象字面量只能指定已知属性,并且“更新”类型中不存在“bookId”。重载 2 of 2, '(state: EntityState, update: { payload: Update; type: string; }): EntityState',给出以下错误。'{ bookId: number; 类型的参数 更改:{标题:字符串;}; }' 不可分配给类型为 '{ payload: Update; 的参数。类型:字符串;}'。对象字面量只能指定已知属性,并且类型 '{ payload: Update; 中不存在 'bookId' 类型:字符串;}'.ts(2769)
为什么当我明确定义bookId
为我的选择 ID 时会看到此错误?