首页 > 解决方案 > 可以用什么表达式替换条件类型中的“扩展对象”

问题描述

当我定义一个辅助类型 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在这种特殊情况下,我找不到可以替换的东西

我想知道如何正确编写此类类型?

标签: typescripttypescript-eslint

解决方案


我相信你可以用不同的方法来解决它。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 不是原始的 - 那么它是一个对象。


推荐阅读