当前位置: 首页 > news >正文

最新创建的网站知名品牌形象策划公司

最新创建的网站,知名品牌形象策划公司,做单网站,wordpress如何改标题目录 一、Vue 3 TypeScript 1. 项目创建与配置 项目创建 关键配置文件 2.完整项目结构示例 3. 组件 Props 类型定义 4. 响应式数据与 Ref 5. Composition 函数复用 二、组件开发 1.组合式API#xff08;Composition API#xff09; 2.选项式API#xff08;Options…目录 一、Vue 3 TypeScript  1. 项目创建与配置 项目创建 关键配置文件 2.完整项目结构示例 3. 组件 Props 类型定义 4. 响应式数据与 Ref 5. Composition 函数复用 二、组件开发 1.组合式APIComposition API 2.选项式APIOptions API) 三、Vue 2 TypeScript 1. 安装依赖 2. 类组件Vue Class Component) 3.Vuex类型安全 四、状态管理Pinia TypeScript 1. 定义 Store 2. 在组件中使用 五、高级类型操作 1.全局属性扩展 2. 为无类型库添加声明 3.泛型组件 4.使用 Vue Router 六、最佳实践 严格类型检查 类型导入 避免 any 性能优化 七、常见问题 Q1:模板中的类型检查 Q2处理$refs类型 Q3:动态路由类型(Vue  Router Q2: 如何处理模板中的类型检查 八、学习资源 一、Vue 3 TypeScript  Vue 3 原生支持 TypeScript推荐使用 script setup 语法糖和 Composition API。 1. 项目创建与配置 项目创建 使用 Vue CLI 或 Vite 创建支持 TypeScript 的 Vue 项目 # 使用 Vite 创建 Vue TS 项目推荐 npm create vitelatest my-vue-app -- --template vue-ts# 进入项目并运行 cd my-vue-app npm install npm run dev# 使用 Vue CLI需全局安装 vue/cli vue create my-vue-app # 选择 Manually select features → 勾选 TypeScript 关键配置文件 tsconfig.json {compilerOptions: {target: ESNext,module: ESNext,strict: true, // 启用严格模式jsx: preserve, // 支持 JSX可选moduleResolution: node,baseUrl: ./,paths: {/*: [src/*] // 路径别名},types: [vite/client] // Vite 环境类型},include: [src/**/*.ts, src/**/*.d.ts, src/**/*.vue] } vite.config.ts(vite项目) import { defineConfig } from vite; import vue from vitejs/plugin-vue;export default defineConfig({plugins: [vue()],resolve: {alias: {: /src // 路径别名}} }); 2.完整项目结构示例 src/components/Button.vue // 基础组件GenericList.vue // 泛型组件stores/counter.ts // Pinia Storetypes/global.d.ts // 全局类型扩展api.d.ts // API 响应类型views/Home.vueApp.vuemain.tsvite-env.d.ts 3. 组件 Props 类型定义 script setup langts // 定义 Props 类型 interface Props {title: string;count?: number; // 可选参数isActive: boolean; }// 声明 PropswithDefaults 设置默认值 const props withDefaults(definePropsProps(), {count: 0,isActive: false });// 使用 Props console.log(props.title); /scripttemplatediv :class{ active: props.isActive }{{ title }} - {{ count }}/div /template 4. 响应式数据与 Ref script setup langts import { ref, computed } from vue;// 定义响应式数据自动推断类型 const count ref(0); // 类型为 Refnumber// 显式指定复杂类型 interface User {name: string;age: number; } const user refUser({ name: Alice, age: 30 });// 计算属性 const doubleCount computed(() count.value * 2);// 函数 const increment () {count.value; }; /script 5. Composition 函数复用 // composables/useCounter.ts import { ref } from vue;export default function useCounter(initialValue: number 0) {const count ref(initialValue);const increment () {count.value;};return {count,increment}; }// 在组件中使用 script setup langts import useCounter from /composables/useCounter;const { count, increment } useCounter(10); /script 二、组件开发 1.组合式APIComposition API script setup langts import { ref, computed, onMounted } from vue;// Props 类型定义 interface Props {title: string;initialCount?: number; } const props withDefaults(definePropsProps(), {initialCount: 0 });// 响应式数据 const count ref(props.initialCount); const doubleCount computed(() count.value * 2);// 事件触发 const emit defineEmits{(e: count-change, newCount: number): void; }();// 方法 const increment () {count.value;emit(count-change, count.value); };// 生命周期 onMounted(() {console.log(Component mounted); }); /scripttemplatedivh2{{ title }}/h2pCount: {{ count }}, Double: {{ doubleCount }}/pbutton clickincrement1/button/div /template 2.选项式APIOptions API) script langts import { defineComponent } from vue;interface State {message: string;count: number; }export default defineComponent({props: {title: {type: String,required: true}},data(): State {return {message: Hello Vue!,count: 0};},computed: {reversedMessage(): string {return this.message.split().reverse().join();}},methods: {increment() {this.count;}} }); /script 三、Vue 2 TypeScript Vue 2 需通过 vue-class-component 或 vue-property-decorator 增强类型支持。 1. 安装依赖 npm install vue-class-component vue-property-decorator --save2. 类组件Vue Class Component) templatedivp{{ message }}/pbutton clickincrementCount: {{ count }}/button/div /templatescript langts import { Component, Vue, Prop } from vue-property-decorator;Component export default class MyComponent extends Vue {// PropsProp({ type: String, required: true }) readonly title!: string;Prop({ default: 0 }) readonly initialCount!: number;// 数据private count: number this.initialCount;// 计算属性get message(): string {return ${this.title}: ${this.count};}// 方法increment() {this.count;} } /script 3.Vuex类型安全 // store/modules/user.ts import { Module } from vuex;interface UserState {name: string;age: number; }const userModule: ModuleUserState, RootState {namespaced: true,state: () ({name: Alice,age: 30}),mutations: {SET_NAME(state, payload: string) {state.name payload;}},actions: {updateName({ commit }, newName: string) {commit(SET_NAME, newName);}},getters: {fullInfo: (state) ${state.name} (${state.age})} }; 四、状态管理Pinia TypeScript Pinia 是 Vue 官方推荐的状态管理库天然支持 TypeScript。 1. 定义 Store // stores/counter.ts import { defineStore } from pinia;interface CounterState {count: number;lastUpdated?: Date; }export const useCounterStore defineStore(counter, {state: (): CounterState ({count: 0,lastUpdated: undefined}),actions: {increment() {this.count;this.lastUpdated new Date();}},getters: {doubleCount: (state) state.count * 2} }); 2. 在组件中使用 script setup langts import { useCounterStore } from /stores/counter;const counterStore useCounterStore();// 直接修改状态 counterStore.count;// 通过 action 修改 counterStore.increment();// 使用 getter console.log(counterStore.doubleCount); /script 五、高级类型操作 1.全局属性扩展 // src/types/global.d.ts import { ComponentCustomProperties } from vue;declare module vue/runtime-core {interface ComponentCustomProperties {$formatDate: (date: Date) string; // 全局方法$api: typeof import(./api).default; // 全局 API 实例} }// main.ts 中注入 app.config.globalProperties.$formatDate (date: Date) date.toLocaleString(); 2. 为无类型库添加声明 创建 src/types/shims.d.ts declare module untyped-vue-library {export function doSomething(config: any): void; } 3.泛型组件 script setup langts genericT import { ref } from vue;interface GenericListPropsT {items: T[];keyField: keyof T; }const props definePropsGenericListPropsT();const selectedItem refT(); /scripttemplateulli v-foritem in items :keyitem[keyField]clickselectedItem item{{ item }}/li/ul /template 4.使用 Vue Router // router/index.ts import { createRouter, createWebHistory, RouteRecordRaw } from vue-router;const routes: ArrayRouteRecordRaw [{path: /,name: Home,component: () import(/views/Home.vue)} ];const router createRouter({history: createWebHistory(),routes });export default router; 六、最佳实践 严格类型检查 在 tsconfig.json 中启用严格模式 {compilerOptions: {strict: true,noImplicitAny: false // 可逐步开启} } 类型导入 优先使用 TypeScript 类型导入 import type { Router } from vue-router; 避免 any 尽量使用精确类型仅在紧急情况下使用 any。 性能优化 1.类型安全的异步组件 // 显式定义加载的组件类型 const AsyncModal defineAsyncComponent({loader: () import(./Modal.vue),loadingComponent: LoadingSpinner,delay: 200 }); 2.避免不必要的类型断言 // Bad: 过度使用 as const data response.data as User[];// Good: 使用类型守卫 function isUserArray(data: any): data is User[] {return Array.isArray(data) data.every(item id in item); } if (isUserArray(response.data)) {// 安全使用 response.data } 七、常见问题 Q1:模板中的类型检查 安装Volar VS Code插件 禁用Vetur避免冲突 Q2处理$refs类型 // main.ts import { createApp } from vue;declare module vue/runtime-core {interface ComponentCustomProperties {$myGlobal: string;} }const app createApp(App); app.config.globalProperties.$myGlobal hello; Q3:动态路由类型(Vue  Router // router/index.ts import { createRouter, createWebHistory, RouteRecordRaw } from vue-router;declare module vue-router {interface RouteMeta {requiresAuth?: boolean;} }const routes: RouteRecordRaw[] [{path: /user/:id,component: () import(/views/User.vue),props: (route) ({ id: Number(route.params.id) }) // 类型转换} ]; Q3: 如何为全局属性添加类型 在 Vue 3 中 // main.ts import { createApp } from vue;declare module vue/runtime-core {interface ComponentCustomProperties {$myGlobal: string;} }const app createApp(App); app.config.globalProperties.$myGlobal hello; Q2: 如何处理模板中的类型检查 Vue 3 的 Volar 插件替代 Vetur提供模板内类型检查需在 VS Code 中安装。 八、学习资源 Vue 3 TypeScript 官方指南 Pinia 官方文档 Vue 3 TypeScript 示例项目 本文有待更新暂时不为最终版本 码字不易各位大佬点点赞
http://www.hkea.cn/news/14413131/

相关文章:

  • 网站打不开dns修改吗湖南网站设计
  • 淮北官方网站二维码在线生成制作
  • 北京海淀区邮编wordpress优化服务器
  • 网站的通知栏一般用什么控件做学编程软件
  • 厚街商城网站建设ppt超级市场
  • 建站开发重庆网站建设方案书
  • c#网站开发工具哈尔滨城乡建设网站
  • 网站打开速度影响因素佳能网站建设需求报告
  • 做sorry动图的网站网站建设 昆明邦凯网络
  • 常州专业网站建设公司咨询深圳建设门户网站
  • 我想学习做网站做渠道的网站有哪些
  • ip38域名信息查询网站找做网站的客户
  • dw做aspx网站如何做产品的网络推广
  • 域名估价网站wordpress 媒体
  • 怎么做二维码让别人扫码进入网站装修公司最怕三种人
  • 网站改版的方式大致为局网站建设管理整改情况
  • 鹤壁做网站公司国外免费ip地址
  • 推广网站2024如皋建设医院网站
  • 天河区门户网站教育专栏天元建设集团有限公司王士坤
  • 百度搜索什么关键词能搜到网站网站资讯创作
  • 最有效的网站推广公司杭州专业网站营销
  • 贵州建设监理网站培训通知栏营销型网站建设的特点表现
  • 绍兴做网站的公司电子商务网站建设ppt模板下载
  • 怎样查到一些做品牌包的网站网站备案一天通过
  • 蓝色系的网站优秀的企业网站
  • 福州网站建设效果营销型网站建设实战
  • 唐山网站建设找煌途微信小程序制作文档
  • 2023免费网站推广沈阳做机床的公司网站
  • 如何看网站做没做推广wordpress 本地 搭建
  • 学校英文版网站建设方案ios wordpress使用