使用“按引用传递参数”编译器CodeCheck报错

编写如下代码:

import { EasyPage } from './easypage/EasyPage'; 
import { ListPage } from './listpage/ListPage'; 
 
@Builder function tabBarItem($$: { isselected:boolean,title: string }) { 
  Column() { 
    Image($r("app.media.app_icon")).width(25).height(25) 
    Text($$.title).fontColor($$.isselected ? Color.Red : Color.Gray).padding({ top: 10 }) 
  }.alignSelf(ItemAlign.Center) 
} 
 
@Entry 
@Component 
struct Index { 
  @State currentTab: number = 0; 
 
  build() { 
    Column() { 
      Tabs({ barPosition: BarPosition.End }) { 
 
        TabContent() { 
          EasyPage() 
        }.tabBar(tabBarItem({isselected:(this.currentTab == 0),title:"常规"})) 
 
        TabContent() { 
          ListPage() 
        }.tabBar(tabBarItem({isselected:(this.currentTab == 1),title:"列表"})) 
 
      } 
      .width("100%") 
      .height("100%") 
      .barWidth("100%") 
      .barHeight(70) 
      .onChange((pos) => { 
        this.currentTab = pos; 
      }) 
    }.width("100%") 
    .height("100%") 
  } 
}

报错信息:

Object literals cannot be used as type declarations (arkts-no-obj-literals-as-types) <ArkTSCheck>
HarmonyOS
2024-11-04 11:08:21
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

{isselected:boolean,title: string} 和 {isselected:(this.currentTab == 0),title:“常规”} 这两个对象字面量在ArkTS中不能作为类型声明,这是因为ArkTS需要明确的类型定义,而不是动态的类型推导。ArkTS不支持直接使用对象字面量作为函数参数的类型,需要使用TS内置的类型系统或者自定义类型来代替。以下是一个参考:

import { EasyPage } from './easypage/EasyPage'; 
import { ListPage } from './listpage/ListPage'; 
 
// 定义一个自定义类型,用于表示tabBarItem的参数 
interface TabBarItem { 
  isSelected: boolean; 
  title: string; 
} 
 
// 使用自定义类型定义函数参数 
@Builder function tabBarItem(params: TabBarItem) { 
  Column() { 
    Image($r("app.media.app_icon")).width(25).height(25) 
    Text(params.title).fontColor(params.isSelected ? Color.Red : Color.Gray).padding({ top: 10 }) 
  }.alignSelf(ItemAlign.Center) 
} 
 
@Entry 
@Component 
struct Index { 
  @State currentTab: number = 0; 
 
  build() { 
    Column() { 
      Tabs({ barPosition: BarPosition.End }) { 
        TabContent() { 
          EasyPage() 
        }.tabBar(tabBarItem({ isSelected: this.currentTab == 0, title: "常规" })) 
 
        TabContent() { 
          ListPage() 
        }.tabBar(tabBarItem({ isSelected: this.currentTab == 1, title: "列表" })) 
      } 
      .width("100%") 
      .height("100%") 
      .barWidth("100%") 
      .barHeight(70) 
      .onChange((pos) => { 
        this.currentTab = pos; 
      }) 
    } 
    .width("100%") 
    .height("100%") 
  } 
}
分享
微博
QQ
微信
回复
2024-11-04 17:09:06
相关问题
HarmonyOS 编译器配置不生效
463浏览 • 1回复 待解决
编译器突然不识别资源文件
417浏览 • 1回复 待解决
Pycharm编译器只适用于JAVA吗
9003浏览 • 2回复 待解决
router传递hashmap参数问题
1571浏览 • 1回复 待解决
HarmonyOS http post请求参数传递
46浏览 • 1回复 待解决