TypeScript类中设置子数组值遇类型不匹配错误,求排查原因
问题原因与解决方案
问题核心:类型声明与实际赋值不匹配
你在定义navbarData的类型时,将children的类型声明为string[](字符串数组),但实际赋值的是包含多个对象的数组——每个子项都带有title、url、icon属性。TypeScript的类型检查机制不允许这种类型不兼容的赋值操作,因此抛出了类型错误。
修正方案
方法1:定义明确的子项接口(推荐)
先单独定义子菜单的接口,再用该接口约束children的类型,代码结构更清晰易维护:
// 定义子菜单的类型接口 interface NavbarChild { title: string; url: string; icon: string; } export class TabsPage { navbarData: { routeLink: string; ionicon: string; iconfirst: IconPrefix; iconsecond: IconName; iconfull: IconProp; label: string; library: string; open: boolean; children: NavbarChild[]; // 替换为接口数组类型 }[] = [ { routeLink: 'dashboard', ionicon: 'apps-sharp', iconfirst: 'fas', iconsecond: 'th', iconfull: ['fas', 'th'], label: 'Main menu', library: 'ion', open: false, children: [ {title: 'sub-menu2', url: '/sub-menu2', icon: 'person' }, { title: 'sub-menu3', url: '/sub-menu3', icon: 'pulse' } ], }, ] }
方法2:直接使用对象字面量类型
如果不想单独定义接口,也可以直接在children的位置声明对象数组的类型:
export class TabsPage { navbarData: { routeLink: string; ionicon: string; iconfirst: IconPrefix; iconsecond: IconName; iconfull: IconProp; label: string; library: string; open: boolean; children: { title: string; url: string; icon: string }[]; // 直接声明对象数组类型 }[] = [ { routeLink: 'dashboard', ionicon: 'apps-sharp', iconfirst: 'fas', iconsecond: 'th', iconfull: ['fas', 'th'], label: 'Main menu', library: 'ion', open: false, children: [ {title: 'sub-menu2', url: '/sub-menu2', icon: 'person' }, { title: 'sub-menu3', url: '/sub-menu3', icon: 'pulse' } ], }, ] }
内容的提问来源于stack exchange,提问作者vinoli
相关产品推荐
相关产品推荐

