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

7 回复
  1. T 不是具体对象也不是具体类型,因此不能参与逻辑处理;
  2. 如果有 def 参数传入,可作为参照进行 if (typeof obj === typeof def) 判断;
  3. 所以你的需求第一步就得依赖有否 def 传入;有,则流程可进行,无,则一切皆休:)
  4. 一定要小心使用 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()方法获取对象的实际类型,结合泛型类型进行判断。

回到顶部