使用已知键为对象编制索引时遇到问题。
export function makePagers<
TableNames extends string,
TState = Record<TableNames, INumericPageParams>
>(initialState: TState) {
...
function _usePager(name: TableNames) {
const { state } = usePagerState();
const pager = state[name]; <-- Here's the error
return {
numbers: { page: pager.page, per_page: pager.per_page },
strings: { page: String(pager.page), per_page: String(pager.per_page)}
};
}
}
当我将鼠标悬停在错误上时,我看到...
const state: TState = Record<TableNames, SwapType<IPageParams, string, number>>
Err: Type 'TableNames' cannot be used to index type 'TState'.ts(2536)
我对此感到困惑,因为所有类型似乎都正确携带,而状态应该只有TableNames
类型的键。
我用的是TypeScript 4.4。
1条答案
按热度按时间t98cgbkg1#
您从未说过
TState
会限制为索引键来自TableNames
的记录,因此索引到TState
是不安全的。您只指定它应该预设为记录。请新增条件约束,告诉TypeScript索引键必须是TableNames
: