这是我目前所尝试的:
export const purifyObject = <
T extends Record<string, unknown>,
K extends keyof T,
V extends K = T[K] extends null | undefined ? never : K,
P = { [VK in keyof V]: T[VK] },
>(
object: T,
): P => {
const keys = Object.keys(object) as (keyof T)[];
return keys.reduce((pureObject, key) => {
const value = object[key];
if ([null, undefined].includes(value)) return pureObject;
return { ...pureObject, [key]: value };
}, {});
};
TSPlayground。
const dirtyObject = {
a: 1,
b: null,
c: undefined,
};
console.log(purifyObject(dirtyObject)); // { a: 1 }
我试图得到一个对象,它的值可以是null,或者是undefined,并且返回相同对象的类型,除了值为null,或者是undefined的键-值对。
遵循上述示例:
{
a: number,
b: null,
c: undefined,
}
应该返回
一个三个三个一个
应该返回
{ [key: string]?: string }
或
{ [key: string]: string }
2条答案
按热度按时间5kgi1eie1#
可以将Map类型与
as
子句一起使用,以排除包含null
或undefined
的键Playground链接
368yc8dk2#
typescript Playground链接
首先,你需要构建一个包含脏值的键的并集,如下所示:
然后,您可以排除这些键,并使用Map的类型构建一个新类型,如下所示: