HarmonyOS鸿蒙Next中如何判断<T>的数据类型
HarmonyOS鸿蒙Next中如何判断<T>的数据类型
求问,如何实现此函数
/// 传入任意 Object 类型,获得指定类型 T 的值
/// def 可选,若 Object 不是指定类型的,则使用 def 默认值
public static objectToValue<T>(obj: Object | undefined, def?: T): T {
// 若 Object 是指定 T 类型的,则返回
// 若 Object 不是 T 类型的,则按如下逻辑返回
// 若 T 是 stirng,则看 def,有则返回 def,无则返回 空字符串 ''
// 若 T 是 boolean,则看 def,有则返回 def,无则返回 false
// 若 T 是 number,则看 def,有则返回 def,无则返回 0
...
}
/// 调用示例
let str = objectToValue<string>(obj); // str 必定为字符串
let bool = objectToValue<boolean>(obj); // bool 必定为布尔值
...
问题主要是在 objectToValue 函数内,如何判断 <T>
的类型是什么
求助有缘人给个小例子🌰
更多关于HarmonyOS鸿蒙Next中如何判断<T>的数据类型的实战教程也可以访问 https://www.itying.com/category-93-b0.html
- T 不是具体对象也不是具体类型,因此不能参与逻辑处理;
- 如果有 def 参数传入,可作为参照进行 if (typeof obj === typeof def) 判断;
- 所以你的需求第一步就得依赖有否 def 传入;有,则流程可进行,无,则一切皆休:)
- 一定要小心使用 as,实际操作中很可能不是想象的结果,特别是对于对象类型,因为它只是断言,告诉编译器我知道自己在做什么,骗过编译器不再管类型不匹配的问题,但到了运行时,该出事还是会出事:)
更多关于HarmonyOS鸿蒙Next中如何判断<T>的数据类型的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
泛型不是入参,不是入参,不是入参。不是入参的东西你在代码里去判断,不肯定判断不了。
还有楼上那个as是不是有点太搞笑了,ts是门标记语言,并不会因为你标记了它是什么类型,它真跑起来就会是什么类型。
你这个需求说实话在js中没见过这么干的,如果你真要这么做,我只能说入参加一个type用于指定你想要的类型。
抱歉新手提问😂,如果一定要入参加一个 type 的话就不用这个函数做了
感谢~
if (typeof T === ‘string’) 判断类型会报错
‘T’ only refers to a type, but is being used as a value here. <ArkTSCheck>
我也试了判断 if (typeof T === 'string')
会报错 'T' only refers to a type, but is being used as a value here.
在HarmonyOS鸿蒙Next中,判断泛型类型<T>
的数据类型可以通过反射机制实现。使用Class<T>
对象获取类型信息,或通过instanceof
关键字进行类型检查。例如:
if (obj instanceof String) {
// 处理String类型
} else if (obj instanceof Integer) {
// 处理Integer类型
}
此外,可以通过getClass()
方法获取对象的实际类型,结合泛型类型进行判断。