使用“按引用传递参数”编译器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
4天前
浏览
收藏 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
微信
回复
4天前
相关问题
HarmonyOS 编译器配置不生效
274浏览 • 1回复 待解决
编译器突然不识别资源文件
213浏览 • 1回复 待解决
Pycharm编译器只适用于JAVA吗
8854浏览 • 2回复 待解决
router传递hashmap参数问题
1449浏览 • 1回复 待解决
windowClass.setUIContent是否支持传递参数
1983浏览 • 1回复 待解决
ETS API求助 Navigator如何传递参数
7070浏览 • 1回复 待解决
HTTP GET请求时如何传递参数
2944浏览 • 1回复 待解决
Web组件访问本地资源并传递参数
704浏览 • 1回复 待解决
关于JS http请求参数传递问题
7284浏览 • 2回复 待解决
HarmonyOS C++库使用aki库,编译报错
181浏览 • 1回复 待解决