'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 |