A继承了B, A中新加了几个get 属性,一个方法中参数类型是A,此时传入B类型报错,怎么改呀class A extends B{}class B {}function cat (x:A){}cat(new B());
你方法中的类型不是 A 吗?哪里就是 B 了。 如果你是想形参是 A,实参是 B,不报错是不可能的。B 类型的变量能兼容A,但是 A 类型的变量不能兼容 B。因为 A 类型的属性能完全覆盖 B 类型的,但是 B 类型由于缺了几个属性,不能覆盖 A 类型的。 说起来有点绕,其实简单点说就是,你设定了形参是 A ,那么传进来的实参就必须要有 A 的所有属性,只能多不能少,而由于 B 没有这些属性,所以不能兼容,当然你能强转。
你方法中的类型不是 A 吗?哪里就是 B 了。
如果你是想形参是 A,实参是 B,不报错是不可能的。B 类型的变量能兼容A,但是 A 类型的变量不能兼容 B。因为 A 类型的属性能完全覆盖 B 类型的,但是 B 类型由于缺了几个属性,不能覆盖 A 类型的。
说起来有点绕,其实简单点说就是,你设定了形参是 A ,那么传进来的实参就必须要有 A 的所有属性,只能多不能少,而由于 B 没有这些属性,所以不能兼容,当然你能强转。