ES2017 NEST JS @IsEmpty 在作为表达式调用时无法解析属性装饰器的签名。此表达式不可调用。不为空

Posted

技术标签:

【中文标题】ES2017 NEST JS @IsEmpty 在作为表达式调用时无法解析属性装饰器的签名。此表达式不可调用。不为空【英文标题】:ES2017 NEST JS @IsEmpty Unable to resolve signature of property decorator when called as an expression.This expression is not callable. is not empty 【发布时间】:2021-07-29 22:04:09 【问题描述】:

大家好,我是 Nest JS 的新手,我尝试添加 dto 验证器,但例如当我尝试添加 isNotEmpty 或 Max 编译器时,会显示此错误:

在调用时无法解析属性装饰器的签名 表达。此表达式不可调用。

DTO:

import  Transform, Type  from 'class-transformer';
import  IsInt, isNotEmpty  from 'class-validator';

export class MessagesQueryDTO 
  @isNotEmpty()
  @IsInt()
  @Type(() => Number)
  readonly limit: number;
  
  @isNotEmpty()
  @Type(() => Number)
  @IsInt()
  readonly skip: number;

我的 config.json


  "exclude": ["**/*spec.ts"],
  "compilerOptions": 
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "esModuleInterop": true,
  

【问题讨论】:

您能展示一下您是如何尝试使用这些装饰器的吗?没看到使用,error和config都没用 也许你没有从类验证器库中导入这些装饰器 请附上您的 dto 代码 【参考方案1】:

isNotEmpty 装饰器应该是 IsNotEmpty,首字母大写。

【讨论】:

【参考方案2】:

为了扩展 Juan 的答案,isNotEmpty 是来自class-valdiator 的内部使用检查,可以用作直接方法。 IsNotEmtpy(注意大写)是装饰器,应该和@一起使用来表示它是装饰器。

【讨论】:

以上是关于ES2017 NEST JS @IsEmpty 在作为表达式调用时无法解析属性装饰器的签名。此表达式不可调用。不为空的主要内容,如果未能解决你的问题,请参考以下文章

在 nest.js 中处理第三方依赖项

Nest.js 在单元测试中无法解析 Mongoose 模型依赖

无法连接到数据库 - NEST.JS 和 TypeORM

Nest.Js 不接受任何更改

如何在 Nest.js 中提供静态 HTML 文件?

在nest.js 中,是不是可以在参数装饰器中获取服务实例?