Машинопись не выдает ошибок при неправильном обращении с типами

#typescript #typescript-types

Вопрос:

Только что начал экспериментировать с машинописным текстом, и я не понимаю, почему приведенное ниже поведение не вызывает ошибки.

 const fun = (n1: number, n2: number) => {
     console.log(n1   n2);
};

const num1 = 5;
let num2;
num2 = "something";

const res = fun(num1, num2);
 

Ну, я понимаю, что если я объявлю num2 как это:

 let num2: number;
 

Это приведет к ошибке TS2322: тип «строка» не может быть присвоен типу «номер».

Но поскольку я объявил в функции fun, что ожидаю ввода номера типа, не должно ли оно выдавать ошибку, просто передавая строку?

Примечание: Я также вижу с использованием

 const fun = (n1: number, n2: number) => {
  console.log(n1   n2);
};

const num1 = 5; 
const num2 = "something";

const res = fun(num1, num2);
 

Ошибка, как и ожидалось: ошибка TS2345: Аргумент типа «строка» не может быть присвоен параметру типа «число».

Комментарии:

1. У вас noImplicitAny включен флажок? Ваш первый пример не компилируется для меня (по крайней мере, с включенными строгими флагами). Смотрите здесь

2. Я никогда не использовал те флаги, которые используете вы. Есть ли какая-нибудь документация, которую я могу прочитать?

3. Конечно typescriptlang.org/tsconfig

4. Да, если я использую флаг, указанный вами во время компиляции, это приведет к ошибке. Мой вопрос, однако, заключается в том, почему функция не выдает ошибку, так как я указал там, что ввод должен быть числом.

5. Просто примечание, это не универсальные типы, генрик был бы чем-то вроде n1: T . Я запустил ваш первый пример на игровой площадке Typescript, и он ДЕЙСТВИТЕЛЬНО приводит к ошибке, которую вы ожидаете. Должно быть, что-то не так с вашей конфигурацией. Вы можете проверить свой пример здесь , на игровой площадке typescript