TypeScript · Avançado · Inglês · Técnico
mixin
Padrão que compõe classes por funções que recebem uma classe base e devolvem uma subclasse com recursos extras, tipadas com um tipo construtor genérico.
Onde usar
Usado para reaproveitar comportamento sem herança múltipla, como Datado(Base). A tipagem se apoia num tipo construtor com rest any[], exigência do compilador para classes mixin.
Em código
type Ctor = new (...a: any[]) => {};
function Datado<B extends Ctor>(Base: B) {
return class extends Base {
criado = new Date();
};
}
class Doc {}
class DocDatado extends Datado(Doc) {}Exemplos
We wrote a mixin to add timestamps to any class.
Escrevemos um mixin para adicionar timestamps a qualquer classe.
A mixin class needs a constructor with a rest parameter of any[].
Uma classe mixin precisa de um construtor com parâmetro rest de any[].
Cuidado
Não confunda com herança comum: o mixin devolve uma nova classe a cada chamada, e o tipo de retorno é a interseção entre a base e a extensão.
Sinônimos
composição de classes
Antônimos
herança múltipla
Origem
Vem do sistema Flavors, de Lisp, que misturava ingredientes em classes como uma sorveteria mistura sabores.