关于配置项default() 和 required()使用的一些问题

.required() 用于声明一个必需的配置项
.default() 用于设置某个配置项的默认值
.required().default() 不能同时使用。
文档 Intersect + Union:配置联动 1 一章中, 提到由于配置项默认情况下都是可选的,所以下方的 enabled 如果类型与上方的默认值不同,就必须加上 required()


我在仿照文档写配置是遇到了问题:必须将log配置为true,否则会报当前配置项不满足约束,请检查配置!

下面是我的配置:

export interface Config {
  log: boolean
  max_log?: number
  only_success?: boolean
  log_type?: string[]
}

export const Config: Schema<Config> = Schema.intersect([
  Schema.object({
    log: Schema.boolean().default(false).description('是否记录日志'),
  }).description('日志设置'),
  Schema.union([
    Schema.object({
      log: Schema.const(true).required(),
      only_success: Schema.boolean().default(true).description('是否只记录操作成功的日志'),
      max_log: Schema.number().default(100).description('最多记录日志数量'),
      log_type: Schema.array(
        Schema.union([
          Schema.const('get').description('get-获取积分'),
          Schema.const('set').description('set-设置积分'),
          Schema.const('add').description('add-增加积分'),
          Schema.const('reduce').description('reduce-减少积分')
        ])
      ).default(['add', 'reduce']).role('checkbox').description('记录日志的类型'),
    })
  ]),
])
2 个赞
  Schema.intersect([
    Schema.object({
      log: Schema.boolean().default(true).description('是否记录日志'),
    }).description('日志设置'),
    Schema.union([
      Schema.object({
        log: Schema.const(false).required(),
      }),
      Schema.object({
        log: Schema.const(true),
        only_success: Schema.boolean().default(true).description('是否只记录操作成功的日志'),
        max_log: Schema.number().default(100).description('最多记录日志数量'),
        log_type: Schema.array(
          Schema.union([
            Schema.const('get').description('get-获取积分'),
            Schema.const('set').description('set-设置积分'),
            Schema.const('add').description('add-增加积分'),
            Schema.const('reduce').description('reduce-减少积分')
          ])
        ).default(['add', 'reduce']).role('checkbox').description('记录日志的类型'),
      }),
    ]),
  ])
2 个赞