Компилятор не разрешает этого, иначе это создаст дыру в системе типов. Рассмотрим следующее:
function findNumbers(obj: Foo) {
return obj.find([1, 2, 3]);
}
findNumbers(new Bar());
findNumbers
должен принимать экземпляр Bar
(поскольку Bar extends Foo
), но Bar.prototype.find
может принимать только string[]
, тогда как Foo.prototype.find
принимает любой массив. В системе типов TypeScript экземпляр подкласса должен иметь возможность делать все, что может делать экземпляр суперкласса. В вашем примере Bar.prototype.find
не сможет принять number[]
, тогда как Foo.prototype.find
может. Следовательно, ваш Bar
не будет допустимым подклассом Foo
.