Я прочитал из документации TypeScript, что вы не можете получить доступ к свойствам из неизвестного типа:
// No property accesses, element accesses, or function calls
function f11(x: unknown) {
x.foo; // Error
x[5]; // Error
x(); // Error
new x(); // Error
}
Но я не понимаю почему? Если я могу присвоить каждое значение, включая объект, почему я не могу получить доступ к свойствам?
Я борюсь со следующим сценарием: у меня есть объект типа any
, я передаю его методу Object.entries
, а затем вызываю forEach
.
Поскольку он имеет тип any
, аргумент вызова forEach будет массивом с первым элементом типа string, а вторым - с типом unknown.
В моем случае этот второй элемент является объектом, но я не могу получить доступ к его свойствам без преобразования его типа, что кажется неправильным.
Вот пример, который выдает ошибку TS (просто абстракция, я знаю, что в этом случае нет смысла объявлять ее как любую):
const obj: any = {
val1: "someval",
val2: {
some: "some",
object: "object",
},
};
Object.entries(obj).forEach(el => {
if (el[1].some) {
console.log(el);
}
});
Я полагаю, это также может быть неправильный ввод для метода Object.entries
, но я все же хотел бы объяснить, почему я не могу получить доступ к свойствам типа unknown.
Итак, вкратце мои вопросы:
- Почему я не могу получить доступ к свойствам типа unknown, даже если тип unknown может быть объектом?
- Я думаю, что есть причина для вышеуказанного вопроса, но
Object.entries
не должен возвращать массив с номером элемента. 0 строки типа и номер элемента. 1 типа какой-нибудь?