TypeScript · Avançado · Inglês · Técnico
bivariance
Exceção de variância em que parâmetros de métodos, declarados com sintaxe de método, são comparados nos dois sentidos, aceitando tipos mais específicos ou mais gerais.
Onde usar
Explica por que uma interface com o método tratar(e: Evento) aceita implementações com parâmetro mais específico, enquanto uma propriedade de função, sob strictFunctionTypes, recusa.
Em código
class A { a = 1; }
class B extends A { b = 2; }
interface M { f(x: A): void }
interface P { f: (x: A) => void }
const m: M = { f(x: B) {} }; // ok
// const p: P = { f(x: B) {} }; // erroExemplos
Methods are bivariant even with strictFunctionTypes on.
Métodos são bivariantes mesmo com strictFunctionTypes ligado.
Declare it as a property to avoid method bivariance.
Declare como propriedade para evitar a bivariância de método.
Cuidado
A bivariância só sobra na sintaxe de método; com strictFunctionTypes, parâmetros de propriedades e de tipos de função são checados de forma contravariante.
Sinônimos
bivariância de métodos
Antônimos
contravariância