Vite4+Typescript+Vue3+Pinia 从零搭建(2) - ts配置
1.Vite4+Typescript+Vue3+Pinia 从零搭建(1) - 项目初始化
2.Vite4+Typescript+Vue3+Pinia 从零搭建(2) - ts配置
3.Vite4+Typescript+Vue3+Pinia 从零搭建(3) - vite配置4.Vite4+Typescript+Vue3+Pinia 从零搭建(4) - 代码规范5.Vite4+Typescript+Vue3+Pinia 从零搭建(5) - 路由router6.Vite4+Typescript+Vue3+Pinia 从零搭建(6) - 状态管理pina7.Vite4+Typescript+Vue3+Pinia 从零搭建(7) - request封装项目代码同步至码云 weiz-vue3-template
关于tsconfig的配置字段可查看其他文档,如 typeScript tsconfig配置详解
tsconfig.json
文件修改如下:
{ "compilerOptions": { "target": "ESNext", // 将代码编译为最新版本的 JS "useDefineForClassFields": true, "module": "ESNext", // 使用 ES Module 格式打包编译后的文件 "lib": ["ESNext", "DOM", "DOM.Iterable"], // 引入 ES 最新特性和 DOM 接口的类型定义 "skipLibCheck": true, // 跳过对 .d.ts 文件的类型检查 "esModuleInterop": true, // 允许使用 import 引入使用 export = 导出的内容 "sourceMap": true, // 用来指定编译时是否生成.map文件 "allowJs": false, // 是否允许使用js "baseUrl": ".", // 查询的基础路径 "paths": { // 路径映射,配合别名使用 "@/*": ["src/*"], "@build/*": ["build/*"], "#/*": ["types/*"] }, /* Bundler mode */ "moduleResolution": "node", // 使用 Node/bundler 的模块解析策略 "allowImportingTsExtensions": true, "resolveJsonModule": true, // 允许引入 JSON 文件 "isolatedModules": true, // 要求所有文件都是 ES Module 模块。 "noEmit": true, // 不输出文件,即编译后不会生成任何js文件 "jsx": "preserve", // 保留原始的 JSX 代码,不进行编译 /* Linting */ "strict": true, // 开启所有严格的类型检查 "noUnusedLocals": true, // 报告未使用的局部变量的错误 "noUnusedParameters": true, // 报告函数中未使用参数的错误 "noFallthroughCasesInSwitch": true // 确保switch语句中的任何非空情况都包含 }, "include": [ // 需要检测的文件 "src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "mock/*.ts", "types/*.d.ts", "vite.config.ts" ], "exclude": [ // 不需要检测的文件 "dist", "**/*.js", "node_modules" ], "references": [{ "path": "./tsconfig.node.json" }] // 为文件进行不同配置 }
tsconfig.node.json
修改文件如下:
{ "compilerOptions": { "composite": true, // 对于引用项目必须设置该属性 "skipLibCheck": true, // 跳过对 .d.ts 文件的类型检查 "module": "ESNext", // 使用 ES Module 格式打包编译后的文件 "moduleResolution": "Node", // 使用 Node/bundler 的模块解析策略 "allowSyntheticDefaultImports": true // 允许使用 import 导入使用 export = 导出的默认内容 }, "include": ["vite.config.ts"] }
类型定义
新建文件夹 types
,用来存放类型定义。比如新建 index.d.ts
:
type TargetContext = "_self" | "_blank"; type EmitType = (event: string, ...args: any[]) => void; type AnyFunction<T> = (...args: any[]) => T; type PropType<T> = VuePropType<T>; type Writable<T> = { -readonly [P in keyof T]: T[P]; }; type Nullable<T> = T | null; type NonNullable<T> = T extends null | undefined ? never : T; interface Fn<T = any, R = T> { (...arg: T[]): R; } interface PromiseFn<T = any, R = T> { (...arg: T[]): Promise<R>; }
后续也可以新增其他文件,比如 global.d.ts
存放全局定义,router.d.ts
存放路由定义等
类型检查命令
修改 package.json
,新增以下命令:
"scripts": { "type-check": "vue-tsc --noEmit" },
保存后,运行 npm run type-check
,即可项目中是否有类型错误
https://www.cnblogs.com/weizwz/p/17822608.html
本博客所有文章除特别声明外,均采用 「CC BY-NC-SA 4.0 DEED」 国际许可协议,转载请注明出处!
内容粗浅,如有错误,欢迎大佬批评指正
分类:
技术
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· MQTT协议发布和订阅的实现,一步步带你实现发布订阅服务。
· Dify开发必备:分享8个官方文档不曾解释的关键技巧
· 活动中台系统慢 SQL 治理实践
· “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发