如果我这样做:
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'。”都会出错。
答案 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或一首诗。它只会是string
。 JSON
类只是一个实用工具类,它为您提供一种将JavaScript object
序列化和反序列化到string
(带有JSON内容)中的方法。