TypeScript · Avançado · Português · Técnico
variância
Regra de como a compatibilidade de tipos compostos acompanha a dos seus componentes: covariante segue o sentido, contravariante inverte, invariante exige igualdade.
Onde usar
Explica por que Array<Gato> pode ser usado como Array<Animal> e por que callbacks com parâmetro mais específico são recusados sob strictFunctionTypes. Surge ao projetar tipos genéricos.
Em código
class Animal { nome = ''; }
class Gato extends Animal { mia() {} }
const gatos: Gato[] = [new Gato()];
const animais: Animal[] = gatos; // covariante
type Fa = (a: Animal) => void;
type Fg = (g: Gato) => void;
const f: Fa = (a) => {};
const g: Fg = f; // contravariante: okExemplos
A variância do parâmetro decide se esse genérico aceita o subtipo.
Callback é contravariante no parâmetro, por isso o erro.
Cuidado
Não confunda variância com herança: ela descreve como Box<Gato> se relaciona com Box<Animal>, e a resposta depende de o parâmetro ser lido, escrito ou ambos.
Sinônimos
variance, covariância e contravariância
Antônimos
invariância