1
resposta

Definição do tipo nos métodos da classe pai

Antes da solução do professor eu optei por tipar os argumentos dos métodos como string | Negociacoes. Assim, o método espera receber tanto um quanto outro. Fiz o teste e o código está funcionando. Gostaria de saber se esse método é prejudicial em algum sentido. Eu entendi que utilizar um tipo genérico também é funcional, mas gostaria de saber se existem alguma vantagem em comparação ao que eu usei.

Meu código:

Classe View

import { Negociacoes } from "../models/negociacoes";

export class View {
  protected elemento: HTMLElement;
  constructor(selector: string) {
    this.elemento = document.querySelector(selector);
  }

  template(model: string | Negociacoes): string {
    throw Error(
      "Ajuste o codigo para o templete ser aleterado por um componente filho"
    );
  }

  update(model: string | Negociacoes) {
    const template = this.template(model);
    this.elemento.innerHTML = template;
  }
}

Classe NegociacoesView

import { Negociacoes } from "../models/negociacoes.js";
import { View } from "./Views.js";

export class NegociacoesView extends View {
  template(model: Negociacoes): string {
    return `
            <table class="table table-hover table-bordered">
                <thead>
                    <tr>
                        <th>DATA</th>
                        <th>QUANTIDADE</th>
                        <th>VALOR</th>    
                    </tr>        
                </thead>
                <tbody>
                    ${model
                      .lista()
                      .map((negociacao) => {
                        return `
                        <tr>
                        <td>${new Intl.DateTimeFormat().format(
                          negociacao.data
                        )}</td>
                        <td>${negociacao.quantidade}</td>
                        <td>${negociacao.valor}</td>
                        </tr>
                        `;
                      })
                      .join("")}
                </tbody>
            </table>
        `;
  }
}

Classe MensagemView

import { View } from "./Views.js";

export class MensagemView extends View {
  template(model: string): string {
    return `
    <p class='alert alert-info'>${model}</p>
    `;
  }
}
1 resposta

No meu entender não existe o motivo de tal modificação, pois o método update(que sempre recebe um tipo string) não tem qualquer retorno fora da classe pai e a possibilidade da classe NegociacoesView receber um parâmetro do tipo string no método template ou na classe MensagemView o metodo template receber um tipo Negociacoes apenas gerará um erro sem qualquer vantagem tanto para a codificação quanto para a execução.