4***@qq.com
4***@qq.com
  • 发布:2024-08-06 19:49
  • 更新:2024-08-29 09:54
  • 阅读:171

安卓下使用defineProps泛型传入嵌套的自定义类型时出现报错,请问如何解决

分类:uni-app x

先放代码

    type ITest={  
        aa?:string,  
        bb?:string  
    }  
    type IProps = {  
        styles ?: ITest  
    }  

    const props = withDefaults(defineProps<IProps>(), {  
        styles:():ITest=>({}),  
    })

出现报错
Cannot create property 'code' on string 'load_transformed failed
19:45:14.249 Caused by:
19:45:14.249 0: Bundler.load() failed
19:45:14.249 1: Bundler.loader.load(D:\Code\jui\jui\unpackage\dist\dev.uvue\uni_modules\j-ui\components\j-navbar\j-navbar.uvue) failed
19:45:14.249 2:
19:45:14.249 x Expected ',', got '?'
19:45:14.249 at uni_modules/j-ui/components/j-navbar/j-navbar.uvue:17:1
19:45:14.249 14 | export default {
19:45:14.249 15 | name: 'j-navbar',
19:45:14.250 16 | props: {
19:45:14.250 17 | styles: { type: [Object as PropType<aa?:string,>, Object as PropType<bb?:string>], required: false, default: ():ITest=>({}) }
19:45:14.250 : ^
19:45:14.250 18 | },
19:45:14.250 19 | emits: ["ratioChange"],
19:45:14.250 20 | setup(
props: GenUniModulesJUiComponentsJNavbarJNavbar) {
19:45:14.250 `----
19:45:14.250
19:45:14.250 3: Syntax Error'

环境:win11 hbuilder:4.24 安卓模拟器运行 标准基座
请问这种情况如何解决?

2024-08-06 19:49 负责人:无 分享
已邀请:
4***@qq.com

4***@qq.com (作者)

自我回复一下吧。。。最终我的解决方案:首先这个问题主要是为了解决vue setup 语法在uniappx中 父子组件如何灵活传递json对象的问题,我尝试过使用utsjsonobject ,但是效果不理想,在APP端会出现警告,并不完美,所以我这边的规范中,已经放弃使用json或者是类型对象,而全面使用Map代替,Map有更好的流通性,更高的性能以及安全性。算是完美解决这个问题了。

  • 1***@qq.com

    兄弟可以贴下 map代码吗 要怎么写

    2024-08-16 08:52

4***@qq.com

4***@qq.com (作者)

比如上面报错的代码:

    type ITest={    
        aa?:string,    
        bb?:string    
    }    
    type IProps = {    
        styles ?: ITest    
    }    

    const props = withDefaults(defineProps<IProps>(), {    
        styles:():ITest=>({}),    
    })

使用Map替换的话

type IMapKey = "aa"|"bb"  
type IProps = {    
    styles ?: Map<IMapKey,string>  
}   
const props = withDefaults(defineProps<IProps>(), {    
     styles:():Map<IMapKey,string>=>new Map<IMapKey,string>(),    
})

使用起来一样可以有代码提示,唯一的缺点就是,如果Map中的value值类型有很多的话,只能用any 就比较麻烦一些。

要回复问题请先登录注册