Pesquisa de site

Typescript declara um método opcional no protótipo da superclasse


Eu tenho o seguinte código:

class Test {
    value: any;

    getSomething() {
       // doSomething doesn't exist on type Test
        if (typeof this.doSomething === 'function') {
            return this.doSomething(this.value);
      }
  }
}

class A extends Test {
    doSomething(value) {
      console.log(value);
    }
}

const a = new A();

a.getSomething();

Eu quero que o método doSomething seja opcional. Se subclasses quiserem implementá-lo, poderiam, mas não são obrigadas a isso. Como posso declará-lo na superclasse como indefinido e evitar o erro do TS?

Resposta #1

Você pode declarar o método como opcional na classe Test

class Test {
    value: any;
    doSomething?(p: any): any;
    getSomething() {
       // doSomething doesn't exist on type Test
        if (typeof this.doSomething === 'function') {
            return this.doSomething(this.value);
      }
  }
}

class A extends Test {
    doSomething(value) {
      console.log(value);
    }
}

const a = new A();
a.getSomething();

Nota Pessoal: você aprende algo novo a cada dia, não fazia ideia de que era possível, mas pensei comigo mesmo qual seria a sintaxe se isso existisse, e eis que funcionou 😂.