HarmonyOS鸿蒙Next中如何获取联合类型的具体类型,联合类型是interface和type

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS鸿蒙Next中如何获取联合类型的具体类型,联合类型是interface和type

实际业务:我想监听Navigation的切换,于是实现了以下监听

```csharp
uiObserver.on('navDestinationSwitch', this.getUIContext(), callBackFunc)

callBackFunc实现如下:

function callBackFunc(info: uiObserver.NavDestinationSwitchInfo) {
    console.info(Constants.TAG,`Navigation页面切换监听: ${JSON.stringify(info.from)}`)
}

但是这里的info.from是一个联合类型,我应该怎么判断他具体是那个类型呢?


更多关于HarmonyOS鸿蒙Next中如何获取联合类型的具体类型,联合类型是interface和type的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

楼主您好,简单类型判断可以使用 typeof 判断;复杂对象类型可以使用 in 操作符,根据复杂对象中属性是否包含在所要判断变量中,来确认变量类型;类类型可以使用 instanceof 判断

NavDestinationInfo 和 NavBar 类型可以在 ets 文件中直接使用,无需 import 导入

请确认以上方法是否能解决您的问题

更多关于HarmonyOS鸿蒙Next中如何获取联合类型的具体类型,联合类型是interface和type的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主补充:

instanceOf、typeOf这些我测试过了,但是在我的类里引用不到NavDestinationInfo和NavBar

info.from instanceOf NavDestinationInfo

sorry,我忘说了,instanceOftypeOf这些我测试过了,但是在我的类里引用不到NavDestinationInfoNavBar

是不是导包有问题?正常应该都能引到,

navBar 貌似是个字符串

直接 const isNavBar = typeof info.from === ‘string’;

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

from: NavDestinationInfo | NavBar

前边的NavDestinationInfo类型怎么判断呢?

在HarmonyOS鸿蒙Next中,获取联合类型的具体类型可以通过类型守卫(Type Guards)来实现。假设你有一个联合类型 MyType,它可以是 InterfaceATypeB,你可以使用 typeofinstanceof 来判断具体类型。

interface InterfaceA {
    propA: string;
}

type TypeB = {
    propB: number;
};

type MyType = InterfaceA | TypeB;

function getType(obj: MyType): string {
    if ('propA' in obj) {
        return 'InterfaceA';
    } else if ('propB' in obj) {
        return 'TypeB';
    } else {
        return 'Unknown';
    }
}

在这个例子中,getType 函数通过检查对象是否包含特定属性来判断其具体类型。如果对象包含 propA,则它是 InterfaceA;如果包含 propB,则它是 TypeB

在HarmonyOS鸿蒙Next中,获取联合类型的具体类型可以通过类型断言或类型保护来实现。假设你有一个联合类型 MyType,它可以是 InterfaceATypeB,你可以使用 as 进行类型断言,或者使用 typeofinstanceof 进行类型保护。例如:

if (myVar instanceof InterfaceA) {
  // 处理 InterfaceA 类型
} else if (myVar instanceof TypeB) {
  // 处理 TypeB 类型
}

或者使用类型断言:

const a = myVar as InterfaceA;
const b = myVar as TypeB;

这样可以确保在处理时明确具体类型。

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