如何对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工具类
868浏览 • 1回复 待解决
如何定义一个未知类型对象
317浏览 • 2回复 待解决
Map类型怎么转换Json string
814浏览 • 1回复 待解决
怎么判断一个类型是stirng
339浏览 • 1回复 待解决
判断一个参数是不是Resource类型
54浏览 • 1回复 待解决
如何常见密钥进行格式转换
279浏览 • 1回复 待解决
如何在ArkTS中实现JSON和Map转换
741浏览 • 1回复 待解决
如何JSON数据进行解析优化
298浏览 • 1回复 待解决