Я прочитал из документации 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.
Итак, в качестве резюме мои вопросы:
- Почему я не могу получить доступ к свойствам неизвестного типа, даже если ты Неизвестный тип gh может быть объектом?
- Я думаю, что есть причина для вышеуказанного вопроса, но не должен
Object.entries
возвращать массив с элементом nr. 0 типа строка и номер элемента 1 типа любой?