You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Class Validator实现允许undefined但拒绝null的验证?

问题:Class Validator如何实现“undefined通过验证,null验证失败”?

现有代码如下:

@IsOptional()
@Transform(({ value }) => (value ? new Date(value) : null))
@IsDate()
doj: Date;

上述代码在doj为undefined时可正常通过验证,但doj为null时也会通过验证。

我希望实现:值为undefined时验证通过,值为null时验证失败。如何通过Class Validator达成这一需求?


编辑补充

基于已采纳的答案,我编写了一个适用于NestJS + GraphQL的日期验证转换函数:

import { BadRequestException } from '@nestjs/common';
import { TransformFnParams } from 'class-transformer';
import * as moment from 'moment';

export const dateTransformValidate = (
  params: TransformFnParams & { nullable: boolean }
) => {
  const date = params.value;
  if (date == null) {
    if (params.nullable === false) {
      throw new BadRequestException(`Cannot remove ${params.key}.`);
    }
    return date;
  }
  const m = moment(date);
  if (m.isValid()) return date;
  throw new BadRequestException('Invalid date.');
};

使用示例

// 允许undefined但拒绝null
@Field({ nullable: true })
@IsOptional()
@Transform((params) => dateTransformValidate({ ...params, nullable: false }))
dob: Date;

// 允许undefined和null
@Field({ nullable: true })
@IsOptional()
@Transform(dateTransformValidate)
doj: Date;

内容的提问来源于stack exchange,提问作者mismaah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:54:54