如何对JSON.parse 做一个通用的类型检查转换

定义的A类型的b属性为number,但是在JSON.parse + as 之后可以赋值为任何类型,这样对于a:A 的b属性操作就不预计了

interface A { a:number, b:number, c?:string } let a:A={ a:1, b:2, } let d = JSON.parse(’{“a”:1,“b”:“2”,“d”:[“a”,“b”]}’) as A let e = d.b + 1; console.log(“e=”,String(e)) // “21” console.log(JSON.stringify(d))
let h = JSON.parse(’{“a”:1,“b”:“ab”,“d”:[“a”,“b”]}’) as A let i = h.b / 1; console.log(“i=”,String(i)) // NaN console.log(JSON.stringify(h))
// 输出结果 e= “21” {“a”:1,“b”:“2”,“d”:[“a”,“b”]} i= NaN {“a”:1,“b”:“ab”,“d”:[“a”,“b”]}

这样对属性b的操作就无法保证结果了,是否有办法对JSON.parse 做一个通用的类型检查转换。

HarmonyOS
2024-05-10 21:46:40
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
xdpan
json parse 类型处理 可以使用reviver 
class Dead { 
name:string = ‘’ 
age: string = ‘’ 
gender?:string 
} 
 
let god:Dead = new Dead() 
// JSON.parse 是根据给定的字符串json化,然后返回结果的, 与指定的变量类型无关 
god = JSON.parse(’{“name”:“zzzz”,“xiaoming”: {“name”:“XXX”,“age”:18}}’, (key:string,value: string | Number): void| string| Number => { 
// 将"age":18 转化成"age":“18” 
if (key == ‘age’ && typeof value == ‘number’) { 
value = value.toString() 
} 
return value 
}) 
 
console.log(’== ’ + god.age)
分享
微博
QQ
微信
回复
2024-05-11 11:11:59
相关问题
如何封装一个通用commonEvent工具类
637浏览 • 1回复 待解决
如何定义一个未知类型对象
218浏览 • 0回复 待解决
Map类型怎么转换Json string
497浏览 • 1回复 待解决
怎么判断一个类型是stirng
288浏览 • 1回复 待解决
如何常见密钥进行格式转换
199浏览 • 1回复 待解决
如何在ArkTS中实现JSON和Map转换
445浏览 • 1回复 待解决
如何JSON数据进行解析优化
232浏览 • 1回复 待解决
如何创建一个worker线程
357浏览 • 1回复 待解决
如何实现一个折叠组件
361浏览 • 1回复 待解决