JSON解析在typescript中验证道具

时间:2018-03-28 10:48:47

标签: 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函数,如示例中所示。但是你在常量字符串中按名称访问对象的属性,因此失去了打字稿的“控制”(例如,改变支柱名称的重构不会反映在开关案例中)。

有没有更好的方法来使用打字稿的可能性?

1 个答案:

答案 0 :(得分:1)

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

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