typescript - 是否可以按值类型过滤键?
问题描述
我想按对象类型的值类型过滤类型。
在当前的打字稿规范中是否有可能?
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: {...} }
解决方案
我通过使用 TS 4.1 新的 Feature Key Remapping解决了
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} }
推荐阅读
- sql - 在具有多个 SELECTS 的 DELETE 中存在“外键不匹配”
- sql-server - 使用和不使用临时表的 SQL Server 查询性能
- python - 数据框索引存在检查
- java - 如何使用 Java 10 及更高版本跳过 ant 中的 javah 任务?
- html - 如何将新 div 放在另一个 div 下以创建新部分?
- regex - 用于替换第 n 个特定字符的正则表达式
- r - randomForest.default(m, y, ...) 中 coercionError 引入的 NA:外部函数调用中的 NA/NaN/Inf (arg 1)
- ruby - Ruby - Binance API:签名未正确签名
- python - 如何从python上的.CEL文件中提取数据表?
- c# - 带有 Parallel.For 的 TPL 并行 Selenium webdriver 实例 - 未测试