向本地存储在TypeScript中的JSON对象添加类型
这是本地存储的JSON对象向本地存储在TypeScript中的JSON对象添加类型,json,typescript,Json,Typescript,这是本地存储的JSON对象 { "data": { "John Doe": {"id":"1234", "username":"johndoe"}, "Sia Xander": {"id":"1235", "username":"siax"} } } 这是我
{
"data": {
"John Doe": {"id":"1234", "username":"johndoe"},
"Sia Xander": {"id":"1235", "username":"siax"}
}
}
这是我拥有的TypeScript文件,我创建了这个函数,但它出错了
import { data } from "../Assets/data.json"
function createData(member: string, id: string, username: string) {
return { member, id, username }
}
interface Rows {
member: string
id: string
username: string
}
const rows: Rows[] = []
Object.keys(data).map(member =>
rows.push(
createData(
member,
data[member]["id"], //error
data[member]["username"] //error
)
)
)
我得到以下错误
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type "data": {
"John Doe": {"id":string, "username":string},
"Sia Xander": {"id":string, "username":string}
}
}
No index signature with a parameter of type 'string' was found on type
"data": {
"John Doe": {"id": string , "username":string},
"Sia Xander": {"id":string, "username":string}
}
}
我如何告诉TypeScript“John Doe”和“Sia Xander”是字符串?
或者我应该改变我制作JSON的方式吗
为什么它不起作用:
这不起作用,因为Object.keys()
可以返回其参数类型上不存在的键。有关更多详细信息,请参阅
相反,什么会起作用: 相反,请尝试使用
对象。条目
:
Object.entries(data).map(([member, memberData]) =>
rows.push(
createData(
member,
memberData["id"],
memberData["username"]
)
)
);
Object.entries
返回键值对,因此您不需要自己进行查找。有关更多信息,请参阅
此外,您还可以以更简单的方式使用
.map
:
您使用.map
的方式很有效,但您可以使其更简单
返回数组,因此不需要使用push()
相反,请尝试以下方法:
const rows: Rows[] = Object.entries(data).map(([member, memberData]) =>
createData(
member,
memberData["id"],
memberData["username"]
)
);
谢谢你的回答!我已经挣扎了一段时间了,我还不熟悉打字。这个解决方案是如此干净和简单,只是喜欢它。