'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



Solution 1:[1]

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

Solution 2:[2]

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.

Solution 3:[3]

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[]> {
...

Solution 4:[4]

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Andrey Mikhaylov - lolmaus
Solution 3 Gorgsenegger
Solution 4 Bruno Crosier