【发布时间】:2017-05-22 05:58:38
【问题描述】:
我有一个 Typescript 应用程序。我将本地存储用于开发目的来存储我的对象,但我在反序列化时遇到了问题。
我有一个 MeetingModel 类型的对象会议:
export interface MeetingModel {
date: moment.Moment; // from the library momentjs
}
我使用 JSON.stringify(meeting) 将此对象存储在 localStorage 中。
我假设 stringify 调用 moment.toJson(),它返回一个 iso 字符串,因此存储的值是:{"date":"2016-12-26T15:03:54.586Z"}。
当我检索这个对象时,我会这样做:
const stored = window.localStorage.getItem("meeting");
const meeting: MeetingModel = JSON.parse(stored);
问题是: meeting.date 包含一个字符串而不是一个时刻!
所以,首先我想知道为什么 TypeScript 会让这种情况发生?为什么我可以分配字符串值而不是 Moment 并且编译器同意?
其次,如何将我的对象从纯 JSON 对象(又名字符串)恢复为 Typescript 类型?
我当然可以创建一个工厂,但是当我的对象数据库长大后,要完成所有这些工作将是一件痛苦的事情。
也许一开始就有更好的存储在本地存储中的解决方案?
谢谢
【问题讨论】:
-
你考虑过使用IndexedDB吗?
-
它不是真正的打字稿问题..它的
json.parse..check here -
@torazaburo 不,IndexedDB 对我的问题有什么好处?
-
@suraj 谢谢!它回答了我的第二个问题!我会尽快修复我的代码。关于我的第一个问题有什么想法吗?
-
IndexedDB 存储实际的 JS 对象,并为提高效率而进行键控/索引。但是,您仍然必须以某种方式重新水合您的对象。
标签: json typescript local-storage