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)
Здесь мой расширенный класс принимается как поле stati c и как аргумент метода.
Но когда я присваиваю MyClass.func
(тип аргумента которого является child ParentExtended
) функция с типом аргумента Parent
, TS говорит, что параметры несовместимы. Почему это происходит? Как бы я позволил ему принять функцию, которая принимает дочерний класс (желательно без обобщений)?
Заранее спасибо