HarmonyOS 鸿蒙Next Cannot read properties of undefined (reading 'kind')

HarmonyOS 鸿蒙Next Cannot read properties of undefined (reading ‘kind’)

Cannot read properties of undefined (reading 'kind')

DevEco3.1和4.0都试过了。只要对dialogController 赋值就报错 ,求帮助

```typescript
[@CustomDialog](/user/CustomDialog)
export struct CustomDialogExample {
  controller: CustomDialogController
  [@Prop](/user/Prop) text: string = "loading";

  build() {
    Column() {
      Text('我是内容:' + this.text)
        .fontSize(20)
        .margin({ top: 10, bottom: 10 })
    }
  }
}

namespace STMFramework {
  type LoadingDialogController = (value?: string) => CustomDialogController

  export class Model {
    public dialogController: LoadingDialogController = (text?: string) => {
      return new CustomDialogController({
        builder: CustomDialogExample({ text }),
      })
    }
  }

  export const defaultModel: Model = new Model();

 //.....
}

// STMFramework.defaultModel.dialogController =  (text?: string) => {
//   return new CustomDialogController({
//     builder: CustomDialogExample({ text }),
//   })
// }

export default STMFramework

更多关于HarmonyOS 鸿蒙Next Cannot read properties of undefined (reading 'kind')的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

找到一些有关TS到ArkTS部分功能被限制的说法:【尽管 ArkTS 是基于 TypeScript 设计的,但出于性能考虑,一些 TypeScript 的特性被限制了。】

https://github.com/HarmonyOS-Next/awesome-harmonyos/blob/main/Adaptation_rules_from_TypeScript_to_ArkTS.md

通常弹窗控制器是在组件内,定制弹窗UI组件无需new声明,而你的声明是在普通类中当作类型声明,估计编译器真的未考虑这种类型声明中带对象还嵌套成员变量又是接口的组合,找客服给IDE开发部门反映吧。

更多关于HarmonyOS 鸿蒙Next Cannot read properties of undefined (reading 'kind')的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


还真是个烧脑问题:)如下在CustomDialogExample前加 new 可消掉编译错误,但似乎和正常的弹窗初始化不符。尝试调用也会有异常。实在不行得找个TS语法专家看看:)要不就是编译器和匹配问题了,得找客服开单。

builder: new CustomDialogExample(...)

另外,这个声明的目标是啥?把弹窗当成函数调用并灵活赋值参数?

这个是API中的CustomDialogController的初始化参数。里面是组件;model中的dialogController是一个方法。调用生成CustomDialogController用于对话框的创建;

类和方法我都明白,我是问你这样做是为啥目的?想要实现什么效果?是要动态改变所创建对话框的部分参数,还是什么?

另外,上面提到的CustomDialogController构建方法里的变量builder在源码中声明的类型是any,这个any有可能被华为IDE限制使用,因为ArkTS对TS做了一些规定,限制了部分会导致代码复杂化的语法,所以ArkTS不是TS的完整超集;所以才问你这样绕个圈要实现啥目的;如果可用其它方式解决就不用硬刚了,否则可能得和客服联系IDE开发组确认是否是因为IDE编译器的限制导致的问题。

问题应该出在

export class Model {...}定义里。 但是为啥还真搞不懂

在HarmonyOS鸿蒙Next开发中,出现“Cannot read properties of undefined (reading ‘kind’)”错误,通常是由于在代码中尝试访问一个未定义对象的属性。具体原因可能包括:

  1. 对象未正确初始化:在访问对象的kind属性之前,对象可能未被正确初始化或赋值,导致其为undefined

  2. 异步操作未完成:如果kind属性依赖于异步操作(如网络请求或数据加载),可能在异步操作未完成时就尝试访问该属性。

  3. API调用错误:可能调用了错误的API或使用了不兼容的API版本,导致返回的对象不符合预期。

  4. 组件生命周期问题:在组件的生命周期方法中,可能在不合适的时机访问了kind属性,例如在组件未完全挂载时。

  5. 数据绑定问题:在使用数据绑定时,可能绑定的数据源未正确传递或解析,导致目标对象为undefined

解决此问题的方法包括:

  • 确保对象在使用前已正确初始化。
  • 检查异步操作是否已完成,确保在数据可用后再访问属性。
  • 验证API调用是否正确,确保使用兼容的API版本。
  • 确保在组件的正确生命周期方法中访问属性。
  • 检查数据绑定逻辑,确保数据源正确传递和解析。

通过以上步骤,可以定位并解决“Cannot read properties of undefined (reading ‘kind’)”错误。

该错误表明在HarmonyOS(鸿蒙Next)开发过程中,尝试访问一个未定义对象的kind属性。通常,这种错误是由于对象未正确初始化或未定义导致的。建议检查代码中相关对象的定义和初始化过程,确保在使用前对象已正确赋值。还可以使用console.log或调试工具检查对象状态,以确定问题根源。

回到顶部