是否可以按值类型筛选关键字



我想按对象类型的值类型筛选类型。

在当前的打字规范中可能吗?

type a = {
a: '123'
}
type b = {
b: '123'
}
tpye c = {
a: '123',
}
type map = {
first: a,
second: b,
third: c,
}
type HavingAValueMap = Magic<map>; // pick value with having 'a' property
// { first: {...}, third: {...} }

I通过使用TS 4.1新的特征密钥重映射解决


type a = { a: string}
type b = { b: string}
type map = {
first: a;
second: b;
third: a;
}
type FilterMapType<T, F> = { [K in keyof T]: T[K] extends F ? T[K] : never }
type CheckValidKey<T, K extends keyof T> = T[K] extends never ? never : K;
type FilterObjectByType<T, F> = {[K in keyof T as CheckValidKey<FilterMapType<T, F>, K>]: T[K]}

type HavingAValueMap = FilterObjectByType<map, a> // { first: { a: string }, third: { a: string} }

我想你说的是Omitutil-type:

type a = {
a: '123'
}
type b = {
b: '123'
}
type c = {
a: '123',
}
type map = {
first: a,
second: b,
third: c,
}
type Values<T> = T[keyof T]
type OmitBy<M, T> = {
[P in keyof M]: M[P] extends T ? never : M[P]
}[keyof M]
type HavingAValueMap = OmitBy<map, a> 
// {
//    b: '123';
// }

请记住,由于类型系统的结构性质,TS将类型ac视为相等的类型

在这里你可以找到更多关于结构类型的信息

在这里你可以找到更多关于utils类型的信息

最新更新