Typescript 按属性类型筛选接口或类型
我有这个Typescript 按属性类型筛选接口或类型,typescript,Typescript,我有这个类型 type Obj = { name: string; age: number; birth: Date; weight: number; height: number; } 我想筛选其属性扩展为number | string的Obj,即我想获取 type Filtered = { name: string; age: number; weight: number; height: number; } 我查找了Typescript实用程序类型,
类型
type Obj = {
name: string;
age: number;
birth: Date;
weight: number;
height: number;
}
我想筛选其属性扩展为number | string
的Obj,即我想获取
type Filtered = {
name: string;
age: number;
weight: number;
height: number;
}
我查找了Typescript实用程序类型,但没有一个满足我的需要。如何实现这一点?使用基于属性值查找属性的帮助器:
type PropertyOfValue<T, V> = {
[K in keyof T]-?: T[K] extends V
? K
: never
}[keyof T];
type PropertyOfValue={
[K in keyof T]-?:T[K]扩展V
K
:从不
}[keyof T];
现在,我们可以通过执行以下操作找到要查找的属性,并从源对象中拾取它们:
type Filtered = Pick<Obj, PropertyOfValue<Obj, string | number>>
type Filtered=Pick
奖金
如果愿意,可以抽象按值拾取的模式,并将其放在全局命名空间中
declare global {
namespace Pick {
type ByValue<T, U> = Pick<T, PropertyOfValue<T, U>>
}
}
声明全局{
名称空间选取{
键入ByValue=Pick
}
}
用法:
type Filtered = Pick.ByValue<Obj, string | number>
type Filtered=Pick.ByValue
使用基于属性值查找属性的帮助器:
type PropertyOfValue<T, V> = {
[K in keyof T]-?: T[K] extends V
? K
: never
}[keyof T];
type PropertyOfValue={
[K in keyof T]-?:T[K]扩展V
K
:从不
}[keyof T];
现在,我们可以通过执行以下操作找到要查找的属性,并从源对象中拾取它们:
type Filtered = Pick<Obj, PropertyOfValue<Obj, string | number>>
type Filtered=Pick
奖金
如果愿意,可以抽象按值拾取的模式,并将其放在全局命名空间中
declare global {
namespace Pick {
type ByValue<T, U> = Pick<T, PropertyOfValue<T, U>>
}
}
声明全局{
名称空间选取{
键入ByValue=Pick
}
}
用法:
type Filtered = Pick.ByValue<Obj, string | number>
type Filtered=Pick.ByValue