# basic **Repository Path**: su27sk/basic ## Basic Information - **Project Name**: basic - **Description**: TypeScipt的基本使用以及结合Vue3使用 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-29 - **Last Updated**: 2026-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: 前端 ## README # TypeScript & Vue3 ## 1.TypeScript的demo - 基本类型和引用类型 ``` // 1.ts不允许改变变量类型 let aa = 1; // a = "1" // 2.基础类型使用 let a: number = 1; // number let b: string = "hello"; // string let c: boolean = true; // boolean let d: null = null; // null let e: undefined = undefined; // undefined let f:symbol = Symbol('symbol'); // symbol let g:bigint = BigInt(100); // BigInt // 3.引用数据类型 let h:Object = {}; // 对象类型 let i: Array = [1,2,3]; // 数组类型 let j:Function = function () {}; // 函数类型 let K: Date = new Date(); // 日期类型 let l: RegExp = /hello/; // 正则表达式 ``` ​ - 自定义类型 & 联合类型 ``` // 自定义类型 type OrderId = number; // 联合类型 number,string,bigint type OrderId2 = number | string | bigint; ``` - 交叉类型 ``` // 联合类型和交叉类型(相当于是一个并集) type Gender = "man" | "woman" type Person = { name: string; age: number; info: { gender: Gender }; }; type Pig = { name: string; age:number; hobby: { eat: boolean; }; }; // 使用& 定义交叉类型 type Animal = Person & Pig; const animal : Animal = { name : 'Tom', age: 12, info: { gender: "man" }, hobby: { eat: true } } ``` ​ - 泛型 ``` // 泛型的使用 // 1. 默认 type Person = { name: string; age: number; info: T } // 2. extends是“你必须长这样”; type Person2 = { name: string; age: number; info: T; } // 3. = 是“你不说话我就当你长这样”。 type Person3 = { name: string; age: number; info: T; } const person : Person3<{hobby: string[]; b:string}> = { name: "大圣", age: 1, info: { hobby :["eat","sleep"], b:"1" }, } ``` ​ - 继承 & 约束泛型 & 条件类型 ``` // 1.继承 class Person {} class Student extends Person {} // 2.约束泛型 function say( a : T) : T { return a; } say({id : "1"}) // 3.条件类型 类似于js的typeof type IsString = T extends string ? true : false const isString : IsString = true ``` ​ - 类型复用 ``` // 类型复用 type Person = {name: string; age: number} // 假如我的参数只需要关注name,而不需要age // 1.粗糙写法 type Person2 = {name: string} // 2.要的拿出来 type Person3 = Pick // 3.不要的排除 type Person4 = Omit ``` - 类型保护 ``` // 类型保护,就是推导类型,通过推导类型来确定类型 type Value = string | number; let value : Value = "123"; // value.toFixed() 这里会报错,因为toFixed方法只针对于number,value又可能为string类型 // 在使用之前就判断出类型就是类型保护 function isString(value : Value) : value is string { return typeof value === "string" } function isNumber(value : Value) : value is number { return typeof value === "number" } const res1 = isString(value) console.log("res :", res1); const res2 = isNumber(value) console.log("res :", res2); ``` ## 2.Vue3 1. ref & computed & watch ``` ``` 2. 生命周期(这里只介绍最常用的三个) ``` ``` ``` ``` 3. 组件通信 组件通信要靠props和emit,父级给子级传的数据 props-defineProps,父级给子级传的事件 emit-defineEmits ``` ``` ``` // slot ``` ​ ## 3.Router 构建路由 ``` import { h } from 'vue' import { createRouter, createWebHistory} from 'vue-router' const routes = [ {path:"/", name:"home",component: h("div","Home")}, { path:"/about", name:"about", component:h("div","About") } ] const router = createRouter({ history:createWebHistory(), routes, }) export default router; ``` 程序入口加载router ``` import { createApp } from 'vue' import './style.css' import App from './App.vue' import "./typescript/7.guard" import router from './router'; const app = createApp(App); // 加载路由配置 app.use(router) app.mount('#app') ``` 主页面显示 ``` ``` 路由守卫 ``` // 全局守卫 router.beforeEach((to,from,next) => { console.log("beforeEach",to,from) // 跳转权限控制 if (Math.random() > 0.5) { next() }else { next({name:"home"}) } }) ``` 页面跳转 ``` ``` ``` ``` ## 4.Pinia ``` import { defineStore } from 'pinia'; import { computed, ref } from 'vue'; import { useCount } from '../composable/useCount'; // 定义状态:老写法 // export const useCounterStore = defineStore ("counter", { // state:() => ({ // count:0 // }), // getters:{ // doubleCount(state) { // return state.count * 2; // } // }, // actions: { // increment() { // this.count++; // } // } // }) export const useCounterStore = defineStore("counter", () => { // const count = ref(0); const count = useCount() const doubleCount = computed(() => count.value * 2); const increment = () => { count.value++}; const decrement = () => {count.value--} return { count, doubleCount, increment, decrement, } }) ``` 主页面加载 ``` import { createApp } from 'vue' import './style.css' import App from './App.vue' import "./typescript/7.guard" import router from './router/index'; import {createPinia} from 'pinia' const app = createApp(App); // 加载路由配置 app.use(router) // 加载pinia const pinia = createPinia(); app.use(pinia) app.mount('#app') ```