typescript - JSON 解析 typescript 验证 Prop

标签 typescript serialization

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 函数。但是您正在通过常量字符串中的名称访问对象的属性,从而失去 typescript 的“控制权”(例如,重构更改 Prop 的名称不会反射(reflect)在开关案例中)。

有没有更好的方法来使用 typescript 的可能性?

最佳答案

不确定这是否是最佳解决方案,但我遇到了一种至少可以标记错误的方法。重构不会更改文字名称,但会在更改后标记为错误。

诀窍是将键的类型设置为 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;
    }
}

关于typescript - JSON 解析 typescript 验证 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532523/

相关文章:

reactjs - 是否可以在 Next.js 中通过国际化重定向服务器端?

html - NgFor 没有显示我给他的数组

javascript - 在 ExtJS 中序列化模型的最佳方法

java - 我如何创建自定义 Jackson Mapper?

http - 在 Angular 2 中的选项卡之间共享 sessionStorage 然后立即使用它?

javascript - 如何在 TypeScript 中将函数类型声明为参数

javascript - 在http get map中创建新对象

java - 序列化和文件大小

java - 为什么 Java 中 Integer.parseInt(String str) 返回 int 而不是 Integer?

node.js - Apache Thrift 与 nodejs 示例