Я пытаюсь понять типы функций в машинописном тексте. Я написал код ниже, он должен выдать ошибку, но он не работает правильно.
function display():void{
console.info("Function is a type")
}
function displayName(name:string):void{
console.info("This is my "+name)
}
function returnName(name:string):string{
return "My name is "+ name
}
let thatsMyName:(naem:string)=>void;
thatsMyName = display
Как видите, я создал три функции. Я создал переменную с именем thatsMyName и дал ей сигнатуру типа функции returnName, но она хранит любую функцию, которую я ей дал. Предполагается, что он выдает ошибку во время компиляции, но не выдает. Может ли кто-нибудь указать, где я ошибаюсь?
Это совершенно верно в javascript/typescript. Если вы передадите больше параметров, чем ожидают функции — ничего страшного не произойдет. Он просто проигнорирует дополнительный параметр. Подробнее о совместимости типов typescriptlang.org/docs/handbook/…
Мысли:
Что касается комментария Амадана, я пытаюсь объяснить свое понимание ответа выше прокомментировал. Я не думаю, что это 100% дубликат, но ответ и суть вопроса одинаковы. (Если вы хотите пометить этот вопрос как дубликат - сделайте это).
Отвечать:
Видимое поведение с вашей стороны, по-видимому, вызвано тем фактом, что каждый код JavaScript является допустимым кодом TypeScript. Это как предпосылка объясняет следующий сценарий:
Как и в ответе на связанный вопрос: многие чрезвычайно распространенные функции JavaScript имеют обратные вызовы с 3 или более параметрами. Например, для каждого имеет обратный вызов, который можно использовать с (currentValue, index, array). Распространенная ошибка — использовать его только с currentValue. Таким образом, количество/содержимое параметров обратного вызова не равны.
Что это значит со стороны TypeScript: каждая функция JavaScript с обратными вызовами должна быть необязательной и не строго типизированной. В противном случае весь код JavaScript не будет выполняться под капотом TypeScript.
Дополнительная информация:
Вывод вашей функции (=> void | string) строго типизирован.
Возможный дубликат Typescript: обязательные параметры обратного вызова?