有没有一种方法可以对对象进行JSON.stringify并且类型为JSON?

时间:2018-07-09 20:37:59

标签: json typescript

如果我这样做:

import { MyType } from 'somewhere';

class MyClass {
    myObj: MyType = new MyType();

    updateObject(newVal: string): void {
        myObj.thing = newVal;
        this.saveStuff(JSON.stringify(myObj));
    }

    saveStuff(json: JSON): void {
        // http request...
    }
}

我收到一个传递字符串而不是JSON的错误。 (我知道我实际上是在传递一个字符串)如何使它将该字符串作为JSON?

我尝试将字符串强制转换为JSON,即:JSON.stringify(foo) as JSON<JSON> JSON.stringify(foo)。但我得到“类型'string'无法转换为类型'JSON'。”都会出错。

2 个答案:

答案 0 :(得分:0)

JSON不是一种类型。通过调用JSON.parse(str)解析字符串时,得到的是对象文字。

在您的代码中,调用JSON.stringify(foo)时,您正在将对象文字foo转换为字符串。

因此,您的saveStuff()收到一个字符串。

JSON表示JavaScript对象表示法。这只是关于如何表示对象的规范。

答案 1 :(得分:0)

使用TypeScript类型注释的目的是宣布要期望的类型具有的值(您不声明)。设置类型批注并在运行代码时经常发现,实际的类型是别的东西。

在这种情况下,尽管TS编译器可以事先评估类型。 知道 JSON.stringify返回一个string。由于您已经注释了saveStuff方法来接受JSON对象,所以它将为类型不匹配带来编译器错误。

无论其内容如何,​​string仍然是string。它可能包含JSON,XML或一首诗。它只会是stringJSON类只是一个实用工具类,它为您提供一种将JavaScript object序列化和反序列化到string(带有JSON内容)中的方法。

相关问题