Функция интерфейса TypeScript Передача параметров - PullRequest
0 голосов
/ 22 января 2019

Курс указывает, что в коде есть ошибка: Аргумент типа {"name": string} не может быть назначен параметру типа 'squareDescriptor'. Свойство "size" отсутствует в типе {"name": string;}.

Ссылка на курс: https://courses.edx.org/courses/course-v1:Microsoft+DEV273x+1T2019/courseware/dbe869f1929d4e46b3b03e60361b9a24/54cf9872f47042b19caf02ab9eac548e/3?activate_block_id=block-v1%3AMicrosoft%2BDEV273x%2B1T2019%2Btype%40vertical%2Bblock%4068996cfa8bb844ccaa4449cb0cbaead3

Я попробовал код, но ошибки нет.

interface squareDescriptor{
    "name":string,
    "size":number
}

let squareFn : Function = (square : squareDescriptor) => {
    return square.name;
}

let square = {
    "name": "a square"
}

let executeFn = squareFn(square);

ожидается: ошибка

фактические результаты: без ошибок.

1 Ответ

0 голосов
/ 22 января 2019

Тип Function просто сообщает компилятору, что он содержит функции, которым вы можете передавать любые аргументы, и может возвращать некоторое значение.squareFn - это функция типа Function, поэтому ей могут быть переданы любые аргументы.Функция, которую вы присвоили ей, принимает только один squareDescriptor, но это не имеет значения.Единственный тип, который имеет значение, это тип переменной.

Чтобы получить это сообщение об ошибке, вам придется изменить объявление, чтобы оно не использовало Function, а фактический тип функции, которую вы назначаете.Вы можете либо опустить тип, тогда компилятор выведет правильный тип для вас, либо явно добавить правильный тип.

let squareFn1 = (square : squareDescriptor) => {
    return square.name;
}
// or
let squareFn2 : (square : squareDescriptor) => string = (square : squareDescriptor) => {
    return square.name;
}
...