我想按对象类型的值类型筛选类型。
在当前的打字规范中可能吗?
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} }
我想你说的是Omit
util-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将类型a
和c
视为相等的类型
在这里你可以找到更多关于结构类型的信息
在这里你可以找到更多关于utils类型的信息