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>
`;
}
}