typescript - 从 TypeScript 中的类型中排除具有空对象类型的属性
问题描述
我在打字稿中有以下类型:
type Foo = {
x: {};
y: {bar: string};
z: {};
};
如何删除所有空属性(即x
和z
)以使生成的类型看起来像这样?
type Result = {
y: {bar: string};
}
解决方案
仅以您的一个示例为例,除了字面意思之外,您还不清楚哪些类型{}
可以删除:例如,您需要保留还是删除object
类型?类型呢?_ unknown
我不会太担心这个;只知道您可能应该遍历一组可能的边缘情况,并确定您提出的任何类型的行为是否可以接受。
无论如何,一种不依赖于导入外部库的可能实现是:
type DropEmpty<T> =
{ [K in keyof T as keyof T[K] extends never ? never : K]: T[K] };
这是使用映射类型中的键重新映射来抑制任何符合特定条件的属性,方法是将有问题的键重新映射到never
.
您可以验证这是否符合您的示例所需的行为:
type Result = DropEmpty<Foo>
/*type Result = {
y: {
bar: string;
};
} */
推荐阅读
- javascript - SyntaxError:运算符“=”的左侧必须是引用
- ruby-on-rails - 如何使用 Ruby on Rails 将 ElasticSearch 从 6.8 升级到 7.X
- excel - VBA code to copy column from Excel based on header name to another sheet
- excel - Get Google Maps XML data, parse it and input to Excel cells
- string - Add escapes to special characters in a string (as a function)
- node.js - node.js require("fs") 给出空对象
- c - SIGSEV on strcmp of memset string
- scala - 以函数式编程风格在无穷无尽的整数流中查找前 N 个数字
- python - Why was the __pycache__ directory not made hidden?
- python - 基于 Id 和 Dependency 对工单进行排序的算法