为Object.entries定义一个不包含未定义值的Typescript类型,可以使用以下方式:
type DefinedEntries<T> = {
[K in keyof T]-?: [K, T[K]];
}[keyof T][];
function definedEntries<T>(obj: T): DefinedEntries<T> {
return Object.entries(obj).filter(([_, value]) => value !== undefined);
}
上述代码定义了一个名为DefinedEntries
的类型,它接受一个泛型参数T
,表示输入对象的类型。DefinedEntries
类型通过使用映射类型和条件类型,遍历输入对象的所有属性,并将属性名和属性值组成一个元组类型。通过[K in keyof T]-?: [K, T[K]]
这一表达式,我们可以确保所有属性值都不是未定义的。
接下来,我们定义了一个名为definedEntries
的函数,它接受一个泛型参数T
,表示输入对象的类型。该函数使用Object.entries
方法将输入对象转换为一个包含所有属性名和属性值的数组。然后,我们使用filter
方法过滤掉属性值为未定义的元素,最终返回一个不包含未定义值的属性名和属性值的数组。
这个类型和函数可以用于过滤掉对象中的未定义属性,只返回定义了的属性名和属性值。使用示例如下:
const obj = {
a: 1,
b: undefined,
c: "hello",
d: undefined,
};
const entries = definedEntries(obj);
console.log(entries);
// 输出:[["a", 1], ["c", "hello"]]
在这个例子中,输入对象obj
包含了四个属性,其中两个属性的值为未定义。通过调用definedEntries
函数,我们可以得到一个只包含定义了的属性名和属性值的数组entries
,并将其打印输出。输出结果为[["a", 1], ["c", "hello"]]
,只包含了定义了的属性名和属性值。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云