Vue Typescript 引入文件接口,就无法使用withDefaults

文章讨论了在Vue应用中遇到的代码规范问题,具体是import导入和props定义不正确导致的错误。通过展示两种写法,一种产生错误,另一种是正确的,强调了在定义组件属性时正确使用defineProps和withDefaults以及提供默认值的重要性。修复后的代码确保了props的正确类型定义和初始化。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

就是代码写的不规范

报错写法

import {Setting} from '@element-plus/icons-vue'
	import { defineProps ,withDefaults } from 'vue'
	import {PiProject} from '@/types/Project'
	interface ProjectCardProps{
		project:PiProject
	}
	const props = defineProps<ProjectCardProps>();

	withDefaults(props,{
		project:{}
	} )

返回值得是一个函数

正确写法

import {Setting} from '@element-plus/icons-vue'
	import { defineProps ,withDefaults } from 'vue'
	import {PiProject} from '@/types/Project'
	interface ProjectCardProps{
		project:PiProject
	}
	const props = defineProps<ProjectCardProps>();
	withDefaults(props,{
		project:():PiProject=>({

		} as PiProject)
	} )

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 如何在Vue使用TypeScript定义Props #### 使用`defineProps`定义Props 对于Vue 3组合API风格,在脚本设置语法(即 `<script setup>` 中),可以利用 `defineProps` 来定义组件接收到的属性。这允许开发者指定属性名以及它们的数据类型。 当仅需简单地声明一组未加约束的prop名称时,可以直接传递字符串数组给 `defineProps` 函数: ```typescript <script setup lang="ts"> import type { Persons } from '@/types' // 定义可选的list prop defineProps(["list"]) </script> ``` 为了提供更严格的类型安全性和编译期检查,应该通过泛型方式向 `defineProps` 提供接口或字面量类型的定义来描述预期接收的props结构及其对应的类型: ```typescript <script setup lang="ts"> import type { Persons } from '@/types' // 定义必填项list prop,并限制其为Persons类型 defineProps<{ list: Persons[] }>() </script> ``` 如果希望某些属性具有默认值,则可以通过 `withDefaults` 辅助函数实现这一点。需要注意的是,默认值表达式的求值发生在运行时;因此,对于复杂数据类型比如对象或数组来说,应当采用工厂函数的形式返回这些默认值以避免共享状态的问题: ```typescript <script setup lang="ts"> import type { Persons } from '@/types' import { withDefaults, defineProps } from 'vue' interface Props { list?: Persons[] } const props = withDefaults(defineProps<Props>(), { // 对于列表这样的复合类型,应使用箭头函数形式给出默认值 list: () => [{ name: '张三', age: 18, id: "adwa1234" }] }) console.log(props.list); </script> ``` 上述方法适用于现代Vue项目中的单文件组件(SFC),特别是那些采用了Composition API 和 `<script setup>` 的场景下[^3]。 #### 类式装饰器模式下的Prop定义 而在类样式组件(`vue-class-component`)环境中,通常会借助选项配置里的 `props` 字段来进行类似的定义工作。下面的例子展示了如何在一个基于类的Vue组件里声明带有类型的props: ```typescript <template> <div>{{ message }}</div> </template> <script lang="ts"> import { Component, Prop, Vue } from 'vue-property-decorator'; @Component({ // 这里也可以直接写成 props 属性而不需要额外导入 Prop 装饰器 props: { content: String, title: { type: String, required: true } } }) export default class MyClassComponent extends Vue { @Prop(String) readonly content!: string; @Prop({type:String,default:'defaultTitle'}) private title!:string; } </script> ``` 这里不仅指定了每个prop的具体类型,还能够设定哪些是必需的、哪些有默认值等特性。这种方式使得代码更加直观易读,同时也保持了良好的TS支持[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值