Компилятор машинописного текста не работает?

Я пытаюсь понять типы функций в машинописном тексте. Я написал код ниже, он должен выдать ошибку, но он не работает правильно.

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, но она хранит любую функцию, которую я ей дал. Предполагается, что он выдает ошибку во время компиляции, но не выдает. Может ли кто-нибудь указать, где я ошибаюсь?

Возможный дубликат Typescript: обязательные параметры обратного вызова?

Amadan 16.07.2019 06:31

Это совершенно верно в javascript/typescript. Если вы передадите больше параметров, чем ожидают функции — ничего страшного не произойдет. Он просто проигнорирует дополнительный параметр. Подробнее о совместимости типов typescriptlang.org/docs/handbook/…

Aleksey L. 16.07.2019 07:48
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мысли:

Что касается комментария Амадана, я пытаюсь объяснить свое понимание ответа выше прокомментировал. Я не думаю, что это 100% дубликат, но ответ и суть вопроса одинаковы. (Если вы хотите пометить этот вопрос как дубликат - сделайте это).

Отвечать:

Видимое поведение с вашей стороны, по-видимому, вызвано тем фактом, что каждый код JavaScript является допустимым кодом TypeScript. Это как предпосылка объясняет следующий сценарий:

Как и в ответе на связанный вопрос: многие чрезвычайно распространенные функции JavaScript имеют обратные вызовы с 3 или более параметрами. Например, для каждого имеет обратный вызов, который можно использовать с (currentValue, index, array). Распространенная ошибка — использовать его только с currentValue. Таким образом, количество/содержимое параметров обратного вызова не равны.

Что это значит со стороны TypeScript: каждая функция JavaScript с обратными вызовами должна быть необязательной и не строго типизированной. В противном случае весь код JavaScript не будет выполняться под капотом TypeScript.

Дополнительная информация:

Вывод вашей функции (=> void | string) строго типизирован.

Другие вопросы по теме