class Parent {
str = 'a';
}
class ParentExtended extends Parent {
num = 1;
}
class MyClass {
static property?: Parent
static method (p: Parent): void {}
static func?: (pParam: Parent) => void
}
const pe: ParentExtended = {
str: '',
num: 1
}
// OK
MyClass.property = pe
// OK
MyClass.method(pe)
// Error
MyClass.func = (p: ParentExtended) => {}
Type '(p: ParentExtended) => void' is not assignable to type '(p: Parent) => void'.
Types of parameters 'p' and 'pParam' are incompatible.
Property 'num' is missing in type 'Parent' but required in type 'ParentExtended'.ts(2322)
在这里,我的扩展类被接受为静态字段和方法的参数。
但是当我给MyClass.func
(其参数类型是子ParentExtended
)分配一个参数类型为Parent
的函数时,TS表示参数不兼容。为什么会这样?我将如何允许它接受接受子类的函数(最好是没有泛型的子类)?
预先感谢
答案 0 :(得分:0)
您正在尝试将声明为func
的函数(pParam: Parent) => void
分配给声明为(p: ParentExtended) => void
的函数。
由于ParentExtended
不是Parent
的超类,因此它不起作用。
您不能确保每个继承Parent
行为的对象也继承ParentExtended
类。
简单示例:
class A {}
class B extends A {}
class C extends A {}
function test(obj: A) {}
在函数test
中,您可以传递类型为B
,C
的对象。