简体   繁体   中英

Unable to resolve signature of property decorator when called as an expression

import { isEmail, isEmpty, isPhoneNumber, Length } from "class-validator"
import { Field, InputType } from "type-graphql";

@InputType()
export class RegisterInput {
    @Field()
    @Length(2, 15, { message: "Username Must Be At Least 2 characters" })
    username?: string;

    @Field()
    @isEmail()
    email?: string;

    @Field()
    @Length(1, 20)
    @isPhoneNumber()
    phoneNumber?: string;

    @isEmpty()
    password?: string

}

The thing is @isEmail() and @isPhoneNumber() and @isEmpty() throw the same error:

Unable to resolve signature of property decorator when called as an expression.
  This expression is not callable.
    Type 'Boolean' has no call signatures.ts(1240)

Please help me out I've been stuck with this bug the whole day

You have to write those Decorators with a capital letter. TypeScript is case sensitive:

import { IsEmail, IsEmpty, IsPhoneNumber, Length } from "class-validator";

@Field()
@IsEmail()
email?: string;

@Field()
@Length(1, 20)
@IsPhoneNumber()
phoneNumber?: string;

@IsEmpty()
password?: string

For people who come here by googling the error message.

I had this error because I was importing the decorator from a .js file. Converting it to TypeScript resolved the issue for me.

My problem was that I accidentally added a ; after the decorator:

@minimumValue("quantity", 5);
async getItems(): Promise<Item[]> {
...

This results in TS1240: Unable to resolve signature of property decorator when called as an expression. .

So the correct syntax is without the ; :

@minimumValue("quantity", 5)
async getItems(): Promise<Item[]> {
...

your problem is because you tried to invoke the class decorator by adding () at the end of it ( @InputType() )

instead you should just do @InputType

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM