#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