回调函数中的泛型方差为何会影响组件属性与事件处理器的安全性
简答题困难926 次浏览
参考答案与解析
核心结论:泛型容器是否允许用较宽或较窄的类型替换参数,取决于该类型参数出现在输入位置、输出位置,还是同时出现在两者中。只产生值的结构通常具有协变倾向,只消费值的回调参数通常具有逆变倾向,既读又写的可变结构往往应视为不变。设计组件属性、事件处理器和状态容器时,不能只看两个对象类型是否存在继承关系,还要判断数据究竟朝哪个方向流动。
底层机制上,TypeScript 采用结构类型系统,并根据类型参数在成员中的使用位置计算兼容性。假设 Dog 是 Animal 的子类型,返回 Dog 的函数可用于要求返回 Animal 的位置,因为调用方只会得到更具体的结果;但接收 Dog 的函数不能安全替代接收任意 `Anima
