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
5 Answers
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
2
-
oh god, i feel so dumb. Thank you though !
– NinjaApr 11, 2021 at 13:53
-
1
Nevermind, I don't know anyone who did not run in such self made problems. 😉 You're welcome. 🙂
– user6749601Apr 11, 2021 at 14:10
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[]> {
...
You might need to add this property to your tsconfig.json
file, under the compilerOptions
property:
"experimentalDecorators": true
Kudos to Technical Rajni for the youtube video solution, here.