`
可以编译通过
我错了,parse后原来类型真的丢失了。。。忽略下面的回答吧
可以编译通过是因为你的编译配置忽略了类型检查,不代表stringify
之后ts就检测不了类型了,你的截图里面的代码的红色波浪线看到了吗,其实那个就是ts的类型检测提示了,你鼠标移动到波浪线就能看到错误提示消息了
JSON.parse返回的就是any。
如果你是普通的Object对应上interface,可能问题不大。
但是如果是你stringfy时候,传入的是自定义的class,序列化时候,会丢失掉原型链信息。就算你后面强制类型断言,实际上parse出来的对象也不是你断言的对象,可能会出问题的。
你这个例子里的几个person,如果你是用类去实现该接口,或者你的类还有继承关系,出的问题就大了。
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
JSON.parse的返回值是any类型,编译器无法知道具体是什么类型,但你可以指定。比如
const person2=JSON.parse(JSON.stringify(person)) as IPerson;