首页 > 其他分享 >[Typescript] Typing Class method with this keyword

[Typescript] Typing Class method with this keyword

时间:2023-02-10 21:11:22浏览次数:43  
标签:Typescript return string Form isInvalid Class values error method

We have the following code:

class Form<TValues> {
  error?: string;

  constructor(
    public values: TValues,
    private validate: (values: TValues) => string | void,
  ) {}

  isInvalid() {
    const result = this.validate(this.values);

    if (typeof result === "string") {
      this.error = result;
      return true;
    }

    this.error = undefined;
    return false;
  }
}

const form = new Form(
  {
    username: "",
    password: "",
  },
  (values) => {
    if (!values.username) {
      return "Username is required";
    }

    if (!values.password) {
      return "Password is required";
    }
  },
);

if (form.isInvalid()) {
  type test1 = Expect<Equal<typeof form.error, string>>; // error: (property) Form<TValues>.error?: string | undefined
} else {
  type test2 = Expect<Equal<typeof form.error, string | undefined>>;
}

 

We want to type isInvalid function, but somehow it doesn't have any arguement. 

One way is using this:

 isInvalid(): this is Form<TValues>

Since it check invalid case, we can do:

isInvalid(): this is Form<TValues> & { error: string } {

This actually solve the issue.

 

Another way we can do it is:

  isInvalid(): this is this & { error: string } {

So second thisis actually the Form<TValues>.

标签:Typescript,return,string,Form,isInvalid,Class,values,error,method
From: https://www.cnblogs.com/Answer1215/p/17110298.html

相关文章