网站建设免费软件有哪些,厦门网站设计定制,营销策划推广公司,怎么用自己的网站做邮箱简介 在Typscript中#xff0c;我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景#xff1a; 我们通过request请求从服务端获取了一条数据#xff0c;数据是个Array的格式#xff0c;Array中的每个元素又是一个对象#xff0c;像下… 简介 在Typscript中我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景 我们通过request请求从服务端获取了一条数据数据是个Array的格式Array中的每个元素又是一个对象像下面这样的数据
const intro [{title: 标题一,description: 描述一,totalNum: 1},{title: 标题二,description: 描述二,totalNum: 2},{title: 标题三,description: 描述三,totalNum: 3},
] 此时我们如果封装几个方法在ts文件中用于处理这样的服务端数据在传参的过程中我们可能用一个Array类型去接这个intro数组但可能项目多人开发别人在使用这个数组时就不了解这个Array中具体每个元素是什么类型此时我们使用PropType。
使用 一个小栗子在非setup语法糖的环境中使用PropType
export interface CompProps {title: string;description: string;totalNum: number;
}
templatediv classbackboxdiv classintroboxdiv v-foritem in introdiv classintrotitle {{ item.title }}/divdiv classintrodescription {{ item.description }}/divdiv classintrototalNum {{ item.totalNum }}/div/div/div/div
/template
script langts
import { PropType, defineComponent } from vue;
import { CompProps } from ./prop;export default defineComponent({name: Comp,props: {intro: {type: Array as PropTypeCompProps[],required: true},}
})
/script
style langless scoped
.introbox {background-color: antiquewhite;padding: 20px;.intro {display: inline-block;padding: 20px;margin: 10px;background-color: silver;}
}
/style
templatedivh2PropType属性的类型验证/h2divComp :introintro/Comp/div/div
/template
script setup langts
import Comp from ./component/index.vue;const intro [{title: 标题一,description: 描述一,totalNum: 1},{title: 标题二,description: 描述二,totalNum: 2},{title: 标题三,description: 描述三,totalNum: 3},
]
/script
style/style 当我们在上边这段代码的文件中使用鼠标停在Comp元素上时此时vscode给出的提示是下面这张图里的样子 可以看到intro不是个Array类型而是PropTypeCompProps[]类型。
一个小栗子在setup语法糖中使用PropType
export interface CompNum {num: number;id: number;
}
templatediv classbackboxdiv classbtnbox v-fornum in numbsdiv classbtn :idString(num.id) clickbuttonEvent($event){{ num.num }}/div/div/div
/template
script setup langts
import { PropType, ref } from vue;
import { CompNum } from ./prop;const props defineProps({nums: {type: Array as PropTypeCompNum[],default: []}
});
const emits defineEmits([update:nums]);
const numbs ref(props.nums);
const buttonEvent (event: any) {let index event.target.id;let arr numbs.value;arr[index].num;numbs.value arr;emits(update:nums, numbs);
}
/script
style scoped langless
.btnbox {display: flex;flex-direction: row;background-color: cadetblue;
}
.btn{display: inline-block;padding: 25px 40px 25px 40px;margin: 10px 40px 10px 20px;background-color: aquamarine;text-align: center;
}/style
templatedivh2PropType属性的类型验证/h2divBtns v-model:numsnumsRef/Btns/div/div
/template
script setup langts
import { ref, watch } from vue;
import Btns from ./component/button.vue;const intro [{title: 标题一,description: 描述一,totalNum: 1},{title: 标题二,description: 描述二,totalNum: 2},{title: 标题三,description: 描述三,totalNum: 3},
]
let one { num: intro[0].totalNum, id: 0 };
let two { num: intro[1].totalNum, id: 1 };
let three { num: intro[2].totalNum, id: 2};
const nums [one, two, three];
const numsRef ref(nums);watch(() numsRef.value,(value) {console.log(newValue , value);},{deep: true}
);/script
style/style