Почему я не могу объявить аргумент метода типа потомка от аргумента родительского класса?
1. Я создал абстрактный класс Repository, в нем создал метод store, который принимает параметр типа BaseDTO.
2. Далее я создаю потомка класса BaseDTO и называю MyDTO.
3. Далее создаю потомка Repository с названием MyRepository объявляю метод store, но в качестве аргумента указываю не сам BaseDTO, а его потомка MyDTO.
Почему я получаю ошибку, что Declaration of MyRepository must be compatible with BaseDTO при том, что в качестве аргумент объявлен потомок BaseDTO? Т.е. получается в качестве аргумента нельзя указывать потомка от аргумента родительского класса?
Если коротко: сужать тип у метода наследника можно для возвращаемого значения, а для аргумента можно расширять. И только так, дабы соблюсти Liskov Substitution Principle. В TypeScript это самая популярная проблема, куда разрабов языка постоянно тыкают носом... тк программы в рантайме падают из-за возможности расширять/сужать как тип параметра, так и возвращаемого значения