3***@qq.com
3***@qq.com
  • 发布:2023-09-04 14:21
  • 更新:2024-05-15 14:09
  • 阅读:435

defiProps<>()定义类型,模板错误提示?

分类:HBuilderX

<script lang="ts" setup>
type T = {
icon : string
id : string
name : string
};
// 不声明变量去接收 defineProps ,模板将list当成 T 类型而不是 T数组类型;
// item 当成 斯俊类型 ....
// 只是错误提示,一切正常!
defineProps<{ list : T [ ] }>() ( list : T [ ] )
// const props = defineProps<{ list : T[] }>()
</script>

<view v-for="item in list" :key="item.id"> // list类型是对象
v-for=" item (string) in list ( list ? : T & undefined ) " :key=" item.id ( id 不能添加到 string ) " // 这是显示的提示

2023-09-04 14:21 负责人:无 分享
已邀请:

最佳回复

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

感谢各位反馈,最近大版本升级,升级了 vue/vite 等相关依赖,目前经过我测试,发现无论是使用 const props 接收 defineProps 还是直接定义 defineProps 均可以在模板中正常推断类型。

如果仍有问题请留言艾特我

zZZ1Ma

zZZ1Ma

@DCloud_UNI_OttoJi 看下这个 4.02.2024030621-alpha

const props = const props = defineProps<{  
    foo: 'bar'  
  }>()  
// 在模板内使用{{foo}}类型为any,必须要props.foo才提示正确类型
zZZ1Ma

zZZ1Ma

用这个语法也不行

  export default {  
    props: {  
      foo: {  
        type: Object as PropType<{name: string}>,  
        default: () => ({name: 'bar'})  
      }  
    }  
  }
  • DCloud_UNI_OttoJi

    感谢各位反馈,最近大版本升级,升级了 vue/vite 等相关依赖,目前经过我测试,发现无论是使用 const props 接收 defineProps 还是直接定义 defineProps 均可以在模板中正常推断类型。如果有问题请在下面重新留言

    2024-05-14 16:43

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

用户反馈

接上文Props类型的问题,升级vue3.4.21后,以下写法,模板内使用bookList仍然提示为any类型:

interface Book {  
title : string  
author : string  
year : number  
}  

// 1. 基于 泛型 定义类型  
const props = defineProps<{  
bookList : Book[]  
}>()  

// 2. 基于 PropType 定义类型  
// const props = defineProps({  
// bookList: Array as PropType<Book[]>  
// })

模板中book in props.bookList循环,只有语法1能正确提示book的类型且book.name有语法提示,而语法2不行:book: Prop<Book[]>book. 点不出来属性

zZZ1Ma

zZZ1Ma

@DCloud_UNI_OttoJi 请看附件,static目录下有对应截图

  • zZZ1Ma

    补充一个options语法:


    <script lang="ts">  
    import { type PropType } from 'vue'

    type Book = {
    uid : number
    /** 标题 */
    title : string
    author : string
    subtitle : string
    }

    export default {
    props: {
    bookList: { // 报红:没有与此调用匹配的重载。
    type: Array as PropType<Book[]>,
    default: () => []
    }
    }
    }
    </script>

    将鼠标指针分别移到模板以下变量上,提示如下:



    1. book => const book: Prop<Book[]>

    2. bookList => (property) bookList: PropType<Book[]>

    3. book.uid => any

    2024-05-15 14:20

要回复问题请先登录注册