class Animal {
eat() { }
}
class Dog extends Animal {
bark() { }
}
declare let animals: Animal[]
declare let dogs: Dog[]
// covariant
animals = dogs
dogs = animals // Error
// contravariant
declare let funcAnimal: (x: Animal) => void
declare let funcDog: (x: Dog) => void
funcAnimal = funcDog // Error (only when "--strictFunctionTypes")
funcDog = funcAnimal // Ok
// if "strictFunctionTypes" is false, funcAnimal can be assigned with funcDog (bivariant)
Typescript - covariance & contravariance 协变与逆变
最新推荐文章于 2024-04-23 22:51:31 发布