对 TypeScript 中的 JSON 和 Array 感到困惑

问题描述 投票:0回答:1

我使用 Sveltekit 和 Nodejs 从数据库获取数据,并且总是这样获取数据

...
responseData = await response.json();

它返回对象,我可以将它分配给一个数组

let getData = [];
getData = responseData ;

让我困惑的是为什么控制台返回的 JSON 对象显示有括号,它应该是一个数组。(但它是用 typeof 检查对象)

[
 {a:1,b:1},
 {a:2,b:2},
]

我对 JSON 对象的期望应该是这样的

{"name":"John", "age":30, "car":null}

为什么 JSON 对象可以直接赋值给数组?

我想我对这些数据类型有一些误解。

arrays json typescript types
1个回答
0
投票

等待

response.json()
的结果当前定义为类型
any
,与其说它是一种类型,不如说是告诉 TypeScript“不用担心这是什么类型”的一种方式。这意味着您不仅可以将任何值分配给
any
类型的变量,还可以将
any
类型的值分配给任何类型的变量,这可能会令人惊讶。 (在这种情况下,通常最好使用类型
unknown
,因为它的价值 - 您需要将
unknown
值显式转换为其他类型,然后才能对其进行更多操作。)

typeof []
"object"
,所以不能用
typeof
来区分数组和对象。使用
Array.isArray(x)
来检查数组。 (请注意,如果您还没有遇到过,
typeof null
也是
"object"
。)

JSON 在顶层被认为是有效的数组。在某些情况下,任何与 JSON 兼容的值(包括字符串和数字等)都可以被接受为顶级值,但这通常是避免的。

© www.soinside.com 2019 - 2024. All rights reserved.