【发布时间】:2021-11-15 21:46:38
【问题描述】:
我编写了一个代码来过滤对象的任何字段,无论通过创建泛型类型接收到的类型如何,但我没有在 typescript 中找到一种优雅的方法,还有其他方法吗?
type Test = {
id: number;
name: string;
actived: boolean;
}
const dd: Array<Test> = [
{id: 2, name: "sss", actived: true},
{id: 3, name: "tt", actived: false},
{id: 4, name: "mmmmm", actived: true},
{id: 5, name: "tttt", actived: true}
]
const run = <T, K extends keyof T>(datas: Array<T>, key: K) => {
return datas.filter(data => castTForFilter(data[key]))
}
const castTForFilter = <K,v = null>(key: K): boolean => {
switch(typeof key) {
case "string":
return key.includes("tt")
case "number":
return key == 2
case "boolean":
return key == true
default:
return false
}
}
console.log(run(dd, "name"))
console.log(run(dd, "id"))
console.log(run(dd, "actived"))
【问题讨论】:
-
您能更好地解释一下您要做什么吗?代码有点混乱。
run是否缺少过滤器值的参数?另外,castTForFilterkey实际上接收的是值,而不是键(data[key]是值)。 -
你可以 curry
castTForFilter,参见示例 tsplay.dev/m3z9LN 。它对你有用吗? -
是的,它是一个值,代码可以过滤对象键而不是执行 data.name 或 data.id 我制作了一个代码,您只需将对象数组和键作为参数传递给它然后,如果键是字符串,我可以使用字符串函数进行比较,如果它是数字函数,那么我在 switch case 中键入键,我想要一种优雅的方式来做到这一点例如:字符串键:我们可以include,chartAt 等... number 类型的键:我们可以 toString 等..
-
请提供更好的方法来回答的预期结果
标签: typescript object types