Код:
type AB = {
a: number
b: string
}
type A = {
a: number
}
interface Int1 {
f(p: A): void
// f: (p: A) => void
}
class Class1 implements Int1 {
f(p: AB): void { console.log(p) }
// f = (p: AB) => { console.log(p) }
}
var o: Int1 = new Class1();
o.f({a: 1})
По закону контравариантности,
Class1 не реализует интерфейс
Int1, потому что классовый метод
f не сможет принимать параметр типа
А.
Тем не менее, тайпчекинг
помалкивает.
Если в интерфейсе поменять определение f (закомментить-раскомментить), то ошибка подсвечивается, независимо от того, как запишем функцию в классе.
Может я чего не понимаю в этой форме?
f(p: A): void Но если тут вместо А подставить, например, число, то всё норм, есть ошибка.