Смысл явного предоставления типа возврата, отличного от Void
или Any
, заключается в том, что вы хотите обеспечить безопасность типов. И вы неявно говорите компилятору, что вы действительно хотите что-то вернуть. Вот почему компилятор ожидает, что вы это сделаете, и жалуется, когда вы этого не делаете. Это определено в спецификации TypeScript раздел 6.1 :
Функция с явным типом, тип возвращаемого значения которой не является типом Void, типом Any или типом объединения, содержащим тип Void или Any в качестве составной части, должен иметь хотя бы один оператор возврата где-то в своем теле
Что касается вашего вопроса относительно return
, вы правы.
return;
и return undefined;
имеют одинаковый результат, определенный в спецификации ECMAScript раздел 13.10 :
Если выражение не указано, возвращаемое значение не определено.
Пропуск оператора return
также имеет тот же эффект, как определено в разделе 9.2.1 . Шаг 11 в основном говорит, что undefined
возвращается, если больше ничего не было возвращено (Шаг 9) или не было выдано исключение (Шаг 10).
Так что, хотя ваши примеры приводят к тому же результату (возвращающему undefined
) в JavaScript, они семантически отличаются для компилятора TypeScript (второй пример. Ничего не возвращает).