HarmonyOS 鸿蒙Next 是否有办法对JSON.parse做一个通用的类型检查转换

HarmonyOS 鸿蒙Next 是否有办法对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 做一个通用的类型检查转换

2 回复

如果用json 做转换的话可以加reviver函数,或者利用三方库 Reflect-metadata, class transform 来实现 son parse 类型处理 可以使用reviver,参考demo

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)

更多关于HarmonyOS 鸿蒙Next 是否有办法对JSON.parse做一个通用的类型检查转换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,对JSON.parse进行通用的类型检查转换,可以通过自定义解析函数来实现。由于JSON.parse默认将JSON字符串解析为JavaScript对象(通常是普通对象或者数组),而这些对象在强类型语言中可能需要明确的类型定义,因此,你需要一个辅助函数来解析JSON字符串并转换为具体的类型。

你可以定义一个泛型解析函数,该函数接受一个JSON字符串和一个类型定义(例如,使用TypeScript的接口或类作为类型定义),然后根据类型定义解析JSON字符串。不过,由于JavaScript的动态类型特性,这种类型检查在运行时主要是基于约定的,并不具备静态类型语言的严格性。

具体实现时,你可以使用try...catch结构来捕获解析错误,并通过类型断言或类型检查库(如TypeScript的is函数)来验证解析后的对象是否符合预期类型。

如果需要在鸿蒙Next的特定环境中进行更精细的类型处理,可能需要利用鸿蒙系统提供的API或框架特性来增强类型安全性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!