【发布时间】:2020-05-07 09:07:46
【问题描述】:
我从 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 调用参数将是一个数组,其中第一个元素为字符串类型,第二个元素为未知类型。
在我的例子中,第二个元素是一个对象,但如果不转换它的类型,我就无法访问它的属性,这似乎是错误的做法。
这是一个示例,它会引发 TS 错误(只是一个抽象,我知道在这种情况下将其声明为 any 没有意义):
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 的属性。
总结一下,我的问题是:
- 为什么即使未知类型可以是对象,我也无法访问未知类型的属性?
- 我想上述问题是有原因的,但
Object.entries不应该返回一个带有元素 nr 的数组。 0 类型的字符串和元素 nr。任何类型的 1 个?
【问题讨论】:
标签: typescript typescript-typings typescript3.0