HarmonyOS 当参数可选类型为 string | number | Resource | Margin | MyInterface1 | MyInterface2 | MyClas时,如何区分参数类型?

假设有一个参数,可选类型为:string | number | Resource | Margin | MyInterface1 | MyInterface2 | MyClass,如何区分这个参数是哪个类型的,特别注意是如何区分不同的interface(类似的场景,其他系统可以通过conformsToProtocol来区分)

阅读 399
1 个回答

类型断言(Type Assertions): 你可以使用类型断言来告诉编译器你确信变量的类型。

function handleParameter(param: string | number | Resource | Margin | MyInterface1 | MyInterface2 | MyClass) {
  if (typeof param === 'string') {
    // param 是 string 类型
  } else if (typeof param === 'number') {
    // param 是 number 类型
  } else if (param instanceof Resource) {
    // param 是 Resource 类型
  } else if ('marginLeft' in param && 'marginTop' in param) {
    // param 是 Margin 类型
  } else if (isMyInterface1(param)) {
    // param 是 MyInterface1 类型
  } else if (isMyInterface2(param)) {
    // param 是 MyInterface2 类型
  } else {
    // 假设剩下的类型是 MyClass
    // param 是 MyClass 类型
  }
}

// 假设你定义了类型守卫函数
function isMyInterface1(param: any): param is MyInterface1 {
  // 根据MyInterface1的特性来返回布尔值
  return /* 判断条件 */;
}

function isMyInterface2(param: any): param is MyInterface2 {
  // 根据MyInterface2的特性来返回布尔值
  return /* 判断条件 */;
}
logo
HarmonyOS
子站问答
访问
宣传栏