打字稿验证道具中的 JSON 解析
Posted
技术标签:
【中文标题】打字稿验证道具中的 JSON 解析【英文标题】:JSON parse in typescript validating props 【发布时间】: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
是自定义类型
也许这会有用:***.com/a/40718205/9050727
或者这个:aliolicode.com/2016/04/23/type-checking-typescript
【参考方案1】:
不确定这是否是最佳解决方案,但我遇到了一种至少可以标记错误的方法。重构不会更改文字名称,但会在更改后标记为错误。
诀窍是将键的类型设置为 as keyof Book
class Book
title: string;
datePublished: Date;
static unserialize(str)
let ret = JSON.parse(str, (key: keyof Book, value) => // "keyof Book" does the trick
switch (key)
case 'datePublished': return new Date(value);
case 'xitle' : return value; // [ts] Type '"xitle"' is not comparable to type '"title" | "datePublished"
default:return value;
) as Book;
return ret;
【讨论】:
有没有更好的方法,因为我有很多属性?以上是关于打字稿验证道具中的 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章