[英]Can I use Typescript generics to filter keys from an object?
我有一个带有工作逻辑的过滤器 function,但我不知道如何编写它的类型:
export function filter<T>(object: T, ...keys: Array<keyof T>): ??? {
let index = -1;
const length = keys.length;
const result = { ...object };
while (++index < length) {
const key = keys[index];
if (key in object) delete result[key];
}
return result;
}
filter({ a: 1, b: 2 }, 'b') // { a: 1 }
Typescript 仍然认为 'b' 属性存在,所以我正在寻找一种方法来指定从T
中删除keys
。
我对Omit
很熟悉(但对 Typescript 来说通常很新),我认为它可以在这方面发挥作用,但我还没有想出办法让它和Array
相遇......
有人看到我正在寻找的路径吗?
(顺便说一句, filter
的特定签名并不重要,如果您有一个更有助于类型安全的替代实现,我很高兴听到它)
解决方案是将keyof T
提取到泛型中。 这应该有效:
export function filter<T, K extends keyof T>(object: T, ...keys: Array<K>): Omit<T, K> {
let index = -1;
const length = keys.length;
const result = { ...object };
while (++index < length) {
const key = keys[index];
if (key in object) delete result[key];
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.