В некоторых ситуациях, мы хотим ограничить входной параметр функции типом «любой объект». Например, для функции, которая проверяет наличие ключей в объекте. Существует несколько способов сделать такую проверку и не все из них работают по тому, что ожидается. Посмотрите на пример:
// В качестве типа используется {}
function toString(obj: {}) {
return obj.toString();
}
toString('wow'); // Ok!
toString(123); // Ok!
toString({}); // Ok!
Пустой объектный тип {}
подразумевает под собой объект любой структуры и ограничивает множество всех значений, за исключением null
и undefined
. Пустой интерфейс работает так же как и пустой объектный тип. Это вряд ли то, что мы ожидали.
Тип Object
— это тип объекта. Он работает почти так же, как тип {}
. Разница только в том, что Object
предопределяет типы toString()
и некоторых других встроенных методов, а тип {}
этого не делает. Чтобы разобраться, изучим такой пример:
const foo: {} = {
toString() {
return 1; // Ok!
}
};
const bar: Object = {
toString() {
return 1; // Error!
}
};
Второе определение bar
не работает, потому что тип Object
указывает, что метод toString()
должен возвращать строку.
Если мы хотим работать с не примитивными значениями, то для этого существует еще один тип — object
с маленькой буквы:
function toString(obj: object) {
return obj.toString();
}
toString('wow'); // Error!
toString(123); // Error!
toString({}); // Ok!
При использовании типа object
попытка получить доступ к свойствам объекта приведет к ошибке. Для такой задачи используются уже другие механизмы.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.