【发布时间】:2021-11-21 06:40:01
【问题描述】:
我正在尝试创建一个过滤器挂钩,我希望挂钩的参数是数据数组、要过滤的道具 (filterProp) 和搜索文本。
所以我希望数据是 T[],filterProp 是一个字符串,表示 T 的键之一,但只有字符串值(所以我可以在过滤中对它们执行“toUpper”和“indexOf”。搜索文本只是一个字符串。
所以我尝试了这样的事情::
export const useFilter = <T, K extends Extract<keyof T,string>>(
data: T[] | undefined,
filterProp: K,
searchText: string
) => {
但是当我尝试用它“toUppercase”时:
data?.filter((item) => item[filterProp].toUpperCase().indexOf(searchText.toUpperCase()) > -1) ?? [];
它提出了 toUppercase 在类型 'T[K]' 上不存在。
有人知道我如何将 filterProp 限制为代表 T 的字符串键之一的字符串值吗?
谢谢
【问题讨论】:
-
你的T和K的接口(类型)是什么?您可以将其添加到您的问题中吗?
-
@novonimo 嗯,它不应该真的有什么区别,因为我需要它来处理 T 的所有接口。我当前的接口是:
interface Item { id: number; name: string; amount: number; image: Image; }我只需要它建议名称为filterprop 的选项(因为它是唯一的字符串),当我从 T 对象 item[filterProp] 中提取指定的道具时,我需要 toUpper 才能正常工作
标签: reactjs typescript generics react-hooks