typescript - 可以用什么表达式替换条件类型中的“扩展对象”
问题描述
当我定义一个辅助类型 RecursivePartial
export type RecursivePartial<T> = {
[P in keyof T]?: T[P] extends Array<infer U>
? Array<RecursivePartial<U>>
: T[P] extends object // ESLint error occurs in this place
? RecursivePartial<T[P]>
: T[P];
};
我收到这样的内容错误:
ESLint:
不要object
用作类型。该object
类型目前很难使用(请参阅此问题)。考虑Record<string, unknown>
改用,因为它可以让您更轻松地检查和使用密钥。(@typescript-eslint/ban-types)
我经历了我能找到的关于这个问题的一切。object
在这种特殊情况下,我找不到可以替换的东西
我想知道如何正确编写此类类型?
解决方案
我相信你可以用不同的方法来解决它。object
是非原始的,对吧?因此我们可以用这种方式重写你的函数:
type Primitives = PropertyKey | boolean
export type RecursivePartial<T> = {
[P in keyof T]?: T[P] extends Array<infer U>
? Array<RecursivePartial<U>>
: T[P] extends Primitives
? T[P]
: RecursivePartial<T[P]>
};
如果 value 不是原始的 - 那么它是一个对象。
推荐阅读
- typescript - 测试执行错误
- javascript - 为什么 Object.key 返回特定对象的排序值?
- rx-java - 我想使用 Rx Java 和 Retrofit 将多个图像上传到服务器,并希望在所有图像成功上传后调用 onNext
- javascript - 单击时淡入元素,如果为空则隐藏更多按钮
- dm-script - 更改默认保存文件夹
- json - 现有 PostgreSQL 之上的文档存储
- javascript - Bootstrap4 响应表 - 固定第一列
- javascript - 找不到 grunt-express-server 的默认端口
- schema - 根据分行、客户和账户类型为客户交易创建星型模式
- python - Matplotlib 比例轴长度相等