Основная причина: нет аннотации типа
Хотя другие ответы решают симптом, я не верю, что они решили основную проблему в вашем коде, которая находится здесь:
var add = function (Num) { return console.log(Num.num1 + Num.num2); };
Параметр здесь называется Num
и не имеет типа .Я полагаю, что вы хотели, чтобы это было:
// name: type
const add = function (num: Num) { return console.log(num.num1 + num.num2); };
Вызов Add
Ваш код не находится в определенном контексте, поэтому давайте на секунду отбросим this
и посмотрим на вызовadd
функция:
// ERROR: Expected 1 arguments, but got 2.
// const add: (num: Num) => void
add(1, 2);
TypeScript теперь помогает вам увидеть ошибку в вашем вызове.Решение вызова на add
без решения вашей основной причины устранило симптом, но не основную проблему.
Теперь вы можете обновить свой вызов, добавив:
add({ num1: 1, num2: 2 });
И это будетработа - как и все будущие звонки;потому что ваша функция add
теперь имеет информацию о типе.
Demo
Перетащите следующее в файл TypeScript или на площадку TypeScript, чтобы увидеть это в действии:
interface Num {
num1: number;
num2: number;
}
const add = function (num: Num) { return console.log(num.num1 + num.num2); };
add(1, 2);
add({ num1: 1, num2: 2 });
add (1, 2)
Если вы хотите иметь метод add, который разрешает подпись add(1, 2)
, вам нужно изменить подпись ... сама полностью аннотированная функция может быть описана как:
const add = function (a: number, b: number): number {
return a + b
};
Если вы хотите увидеть, как интерфейс выглядит для этого, он будет ниже:
interface Adder {
(num1: number, num2: number): number;
}
const add: Adder = function (a, b) {
return a + b;
};
Super Add
Если вы хотите, чтобы ваша функция add
обрабатывать больше чисел, вы можете использовать параметр rest ... как это:
const add = function (...numbers: number[]) {
if (!numbers || !numbers.length) {
return 0;
}
return numbers
.reduce(function (acc, val) {
return acc + val;
});
};
console.log(add());
console.log(add(1, 2));
console.log(add(1, 2, 3, 4));
Это будет обрабатывать любое количество аргументов.