当前位置: 首页 > 知识库问答 >
问题:

JSON解析打字稿验证道具

钱德元
2023-03-14
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中的恢复函数,就像在示例中一样。但是,您正在通过常量字符串中的名称访问对象的属性,从而失去了类型脚本的“控制”(例如,重构更改道具的名称不会反映在开关案例中)。

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

共有1个答案

路阳华
2023-03-14

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

诀窍是将键的类型设置为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模式,当我在网上验证它时,比如http://jsonschemalint.com/draft4/#,它说它是有效的。我把“类型”改成了“对象”、“数组”、“字符串”,其余的结构保持不变。它仍然说是有效的模式。我的理解是当类型=对象时应该有“属性”,当类型=数组时应该有“项目”

  • 我正在努力寻找 有什么不同?

  • 我想知道在使用CsvRoutines包时,是否有方法检查和验证字段。基本上,如果第一列只有数字,我想处理一行,否则跳过/可能抛出异常。我猜2.7.0中发布的@Validate annotation可以实现这一点。但我想知道,是否有其他方法可以在早期版本(如2.5.9)中实现同样的效果?

  • 在XML文件中,我们有一个表示PDF文件的base64编码字符串,该字符串包含一些表表示,即与本例类似。当解码该PDF文档的base64字符串时(如下图所示),我们最终得到的PDF文档大小为66KB,可以在任何PDF查看器中正确打开。 尝试使用TypeScript中的解码相同的base64编码字符串时(在VSCode扩展名内),即使用以下功能: 我们最终得到了一个大小为109KB的PDF文件,以及

  • 问题内容: 我希望能够实例化一个Typescript类,在运行时可以获取该类和构造函数的详细信息。我想编写的函数将包含类名和构造函数参数。 问题答案: 您可以尝试: 编辑 此版本可在TypeScript操场上使用,例如:

  • 我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?