169 похожих чатов

Всем привет! Подскажите пожалуйста, всё ли корректно делает TS в следующем

примере.
Я бы ожидал ошибку типизации на 16 строке, аналогично тому как TS выдаёт ошибку на 32 строке.

https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJIFEC2wySgHgBUA+ZAbwChlkQIAPMACgDc4AbAVwgC5lCBKXswD2wACYBuCgF8KFBMJABnMMkwBPLDjy8M2XNHxkw6gA49kKqKADm00gF5yVajXpheLdl37IHpSlcg5AVlYTYIADo2YRtGAAMIZghwZAB3HAALZBNzXgASMlZOKNyIaXj+KSDZWXlFFWQAIzgxLQMoAFUlaD9kRgh9HTR2vHwOEABrEGE0kGJff2cgwe1oSNoGRgByQkzgJWQDmmFVOBBkYSaAKwgEMABCbaqZKQoAenfkAHVM9RPkNAoMIoMhMtAIAB+ZDxDSjaDxdLANhsZDwZFHC5QCZgYCYCAUFptIbQbrQRhwklQF5yD7vABCHFUGTAmWETPSUDgplMtkxYGElxud1UjBhZDcDF4ADEJvdgIpkBVkABaUjxTYeZCykDyxSVI7MkGTQ5pCAo7hyMpoADC7DYLQQkyIjn6xS4vAEflIInEb1CjQ0dpRjsmumDDsQzuMZgsVls9j6XhKi1IAfCURicUSyVSLOyZQKRW8pVjFReQTkAdURIjobJoKcjAQ9tD4dbUfGUxmcwW3uWrhbIajOz2x2OMzOFyut3uTxe0jen2QAEEUchrDZMmAADRgiFHQ5AkEPQmtOtRhsU9QXp1VIA

1 ответов

16 просмотров

Такую корректную проверку аргументов функций обеспечивает включение опции компилятора strictFunctionTypes. Но при добавлении этой более строгой проверки в TS 2.6 оказалось, что с ней ломается уже существующая типизация DOM и других популярных API, поэтому проверку включили только для свойств в форме функций (next: (value: T) => void), а для методов (next(value: T): void) и конструкторов всё оставили по-старому, то есть со strictFunctionTypes: false. Соответственно, ошибка появится, если в интерфейсе исправить описание свойства next с метода на функцию: play. Больше ничем эти две формы записи свойств типов не отличаются (но не надо путать их с записью свойств в декларациях классов, то есть на уровне значений — там разница есть), поэтому для строгих проверок лучше всегда в интерфейсах и объектных типах записывать функции, как свойства.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта