Vue3魔法手册 作者 张天禹 08_回顾TS中的-接口-泛型-自定义事件

App.vue 删除所有结构和脚本
vue3 引入组件,使用组件就可以了
Person.vue 删除所有结构和脚本
效果图
JS 与 TS
报错
传输层级过多,有单词错的,到最后报错
人的三个属性 id,name,age不能写错
src/types/index.ts 分别暴露
复制代码
// 定义一个接口,用于限制person对象的具体属性和类型
export interface PersonInter {
    id: string,
    name: string,
    age: number
}
ts 设计的规范!
接口里面的字段属性是小写
定义一个接口,用于限制person对象的具体属性和类型
代码写好了,还要交出去,才好使用,有三种暴露方式
复制代码
1,  默认暴露

2, 分别暴露-> 在接口或者方法最前面添加 export ,叫分别暴露

3, 统一暴露
这里使用分别暴露
值与接口的区别 a为值 PersonInter他不是值,他是一种规范,是一种类型。
要求引入前面添加一个type,引入才不会报错
告诉你引入的PersonInter是一个type
如何使用 直接在person:PersonInter 添加就可以了
绿色代码的意思是: 我要定义一个变量person, person必须符合 PersonInter的接口规范。
只要不小心写错了,马上就飘红了
我们想对红色的进行限制,该如何处理?
首先 personList是数组 Array,并且要限制数组里面的每一项
给数组里面的每一项传一个泛型
解释:我们要定义一个变量personList,他一定得是一个数组Array,并且每一项都得符合 PersonInter 接口规范
解释: Persons 符合规范之后,那他肯定是一个数组Array,数组里面的每一项必须符合 PersonInter规范.
红色里面的接口规范又再一次服务Array,然后赋值给自定义类型Persons
然后在自定义类型前面添加一个 export 将他交出去使用
使用
复制代码
import {type PersonInter,type Persons} from '@/types'

// 第一种写法
// let personList:Array<PersonInter> = [
// 	{id: 'ashen12', name: "张三", age: 88}, 
// 	{id: 'ashen13', name: "李四", age: 66}, 
// 	{id: 'ashen14', name: "王五", age: 58}
// ]

// 第二种写法
let personList:Persons = [
    {id: 'ashen12', name: "张三", age: 88}, 
    {id: 'ashen13', name: "李四", age: 66}, 
    {id: 'ashen14', name: "王五", age: 58}
]
回顾了TS的3样东西,第一个是接口,如下图所示
回顾了TS的3样东西,第一个是自定义类型,如下图所示
回顾了TS的3样东西,第一个是泛型,如下图所示
总结:
接口的规范,到底有什么属性,不是我们随便写,以后你得看接口文档,后端返回几个接口你就必须写几个接口。
回顾TS中的-接口-泛型-自定义事件 实现代码如下
复制代码
1, src/components/Person.vue
<template>
	<div class="person">
		???
	</div>
</template>

<script setup lang="ts" name="Person">
	import {type PersonInter,type Persons} from '@/types'
	// let person:PersonInter = {id: 'ashen12', name: "张三", age: 18}
	// 第一种写法
	// let personList:Array<PersonInter> = [
	// 	{id: 'ashen12', name: "张三", age: 88}, 
	// 	{id: 'ashen13', name: "李四", age: 66}, 
	// 	{id: 'ashen14', name: "王五", age: 58}
	// ]

	// 第二种写法
	let personList:Persons = [
		{id: 'ashen12', name: "张三", age: 88}, 
		{id: 'ashen13', name: "李四", age: 66}, 
		{id: 'ashen14', name: "王五", age: 58}
	]

</script>

<style scoped>
	.person {
		background-color: skyblue;
		box-shadow: 0 0 10px;
		border-radius: 10px;
		padding: 20px;
	}

	button {
		margin: 0 5px;
	}

	li {
		font-size: 20px;
	}
</style>




2, src/types/index.ts
// 定义一个接口,用于限制person对象的具体属性和类型
// 自定义接口限制一个人的
export interface PersonInter {
    id: string,
    name: string,
    age: number
}

// 一个自定义类型,用于限制person对象的具体属性和类型
// 第一种写法
export type Persons = Array<PersonInter>

// 第二种写法
export type Persons2 = PersonInter[]
PersonInter是自定义接口,限制一个人的,Persons是自定义类型,限制一堆人的
相关推荐
蜡台2 分钟前
Vue 打包优化
前端·javascript·vue.js·vite·vue-cli
木斯佳3 分钟前
前端八股文面经大全:快手前端一面 (2026-03-29)·面经深度解析
前端·宏任务·原型链·闭包
皙然18 分钟前
Redis配置文件(redis.conf)超详细详解
前端·redis·bootstrap
卷帘依旧42 分钟前
JavaScript中this绑定问题详解
前端·javascript
dweizhao1 小时前
突发!Claude Code源码泄露了
前端
sunny_2 小时前
💥 Claude Code 源码泄露?我把这个最强 AI Coding Agent 的架构扒干净了
前端·agent·claude
西洼工作室2 小时前
React轮播图优化:通过延迟 + 动画的组合,彻底消除视觉上的闪烁感
前端·react.js·前端框架
yaaakaaang2 小时前
(八)前端,如此简单!---五组结构
前端·javascript
我是若尘2 小时前
我的需求代码被主干 revert 了,接下来我该怎么操作?
前端·后端·代码规范
魁首2 小时前
Claude Code 源码泄露的背后,到底与Codex,Gemini 有啥不一样?
前端·openai·claude