примере.
Я бы ожидал ошибку типизации на 16 строке, аналогично тому как TS выдаёт ошибку на 32 строке.
https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJIFEC2wySgHgBUA+ZAbwChlkQIAPMACgDc4AbAVwgC5lCBKXswD2wACYBuCgF8KFBMJABnMMkwBPLDjy8M2XNHxkw6gA49kKqKADm00gF5yVajXpheLdl37IHpSlcg5AVlYTYIADo2YRtGAAMIZghwZAB3HAALZBNzXgASMlZOKNyIaXj+KSDZWXlFFWQAIzgxLQMoAFUlaD9kRgh9HTR2vHwOEABrEGE0kGJff2cgwe1oSNoGRgByQkzgJWQDmmFVOBBkYSaAKwgEMABCbaqZKQoAenfkAHVM9RPkNAoMIoMhMtAIAB+ZDxDSjaDxdLANhsZDwZFHC5QCZgYCYCAUFptIbQbrQRhwklQF5yD7vABCHFUGTAmWETPSUDgplMtkxYGElxud1UjBhZDcDF4ADEJvdgIpkBVkABaUjxTYeZCykDyxSVI7MkGTQ5pCAo7hyMpoADC7DYLQQkyIjn6xS4vAEflIInEb1CjQ0dpRjsmumDDsQzuMZgsVls9j6XhKi1IAfCURicUSyVSLOyZQKRW8pVjFReQTkAdURIjobJoKcjAQ9tD4dbUfGUxmcwW3uWrhbIajOz2x2OMzOFyut3uTxe0jen2QAEEUchrDZMmAADRgiFHQ5AkEPQmtOtRhsU9QXp1VIA
Такую корректную проверку аргументов функций обеспечивает включение опции компилятора strictFunctionTypes. Но при добавлении этой более строгой проверки в TS 2.6 оказалось, что с ней ломается уже существующая типизация DOM и других популярных API, поэтому проверку включили только для свойств в форме функций (next: (value: T) => void), а для методов (next(value: T): void) и конструкторов всё оставили по-старому, то есть со strictFunctionTypes: false. Соответственно, ошибка появится, если в интерфейсе исправить описание свойства next с метода на функцию: play. Больше ничем эти две формы записи свойств типов не отличаются (но не надо путать их с записью свойств в декларациях классов, то есть на уровне значений — там разница есть), поэтому для строгих проверок лучше всегда в интерфейсах и объектных типах записывать функции, как свойства.
Обсуждают сегодня