有没有一种方法可以将一个对象进行JSON.stringify并使其';s类型是JSON吗?

有没有一种方法可以将一个对象进行JSON.stringify并使其';s类型是JSON吗?,json,typescript,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): vo

如果我这样做:

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)转换为JSON
JSON.stringify(foo)
。但是我得到了一个“类型'string'不能转换为类型'JSON.”双向错误。

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

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

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


JSON代表JavaScript对象表示法。它只是一个关于如何表示对象的规范。

您对TypeScript类型注释所做的是宣布您期望值的类型(您不声明类型)。通常情况下,您会设置一个类型注释,当您运行代码时,您会发现实际的类型是其他类型

在这种情况下,尽管TS编译器可以预先计算类型。它知道
JSON.stringify
返回一个
string
。由于您对
saveStuff
方法进行了注释,以接受
JSON
对象,因此类型不匹配将导致编译器错误


无论其内容如何,
字符串
仍然是
字符串
。它可能包含JSON、XML或一首诗。它仍然只是一个
字符串
JSON
类只是一个实用程序类,它为您提供了一种将JavaScript
对象
序列化和反序列化到
字符串
(包含JSON内容)和从
字符串
)的方法。

您想用它实现什么?比如:为什么不把它标记为string(毕竟它是一个string)?我想准确地设置所有东西的打字方式。我可以将它设置为字符串,但它实际上是JSON,所以我希望它在代码中被视为JSON。它实际上不是JSON,而是字符串。您使用的是JSON类的静态方法,其结果是字符串。因此名为
stringify
。正如我在问题中所说,“我知道我实际上在传递一个字符串”。但是,JSON字面上是一个字符串。JSON是一种内容格式。不要将其与
JSON
类混淆。正如我几年前发布的关于这个问题的回答/评论中所述:JSON是一个字符串。