【发布时间】:2018-09-07 00:31:15
【问题描述】:
class Book {
title: string;
datePublished: Date;
static unserialize(str) {
let ret = JSON.parse(str, (key, value) => {
switch (key) {
case 'datePublished': return new Date(value);
default:return value;
}
}) as Book;
return ret;
}
}
取消序列化对象时,您可以像示例中一样使用 JSON.parse 中的 revive 函数。但是您正在通过常量字符串中的名称访问对象的属性,从而失去了打字稿的“控制”(例如,重构更改道具的名称不会反映在 switch 案例中)。
有没有更好的方法来使用打字稿的可能性?
【问题讨论】:
-
您可以根据您的收入JSON格式创建自定义模型,然后使用
instanceof或使用此构造:function isJsonNode(d: Parent | Child): pet is Child { return (<Child>d); }其中Child和Parent是自定义类型