Vue-issue-and-typescript
Vue 路由的坑和 SSR 的坑
因为我没有自己的服务器,所以我只能使用 github 提供的 pages 服务。
但是这个服务是静态的,所以我需要使用 vue SSG 渲染 SSR 的页面,使其成为静态页面。
但是这个过程中遇到了很多问题,唯独 router 和 SSR 的问题最为棘手。
踩坑
在正常的 vue 项目中,我们可以使用 vue-router 来进行路由的管理。
这时我们使用官方的方法构造 main.ts 文件:
1 | import { createApp } from 'vue' |
这样很好,路由也可以正常工作。
但是我们在使用 SSR 的时候,我们需要使用 SSG 的方法构造 main.ts 文件:
1 | import { ViteSSG } from 'vite-ssg' |
这个文件中,我使用了
ID_INJECTION_KEY这个变量,这个变量是element-plus的一个插件,我在这里只是举例说明。
并且,我们需要在 router 文件中不能使用 createRouter 方法
1 |
|
可以看到,直接 export default routes
然后运行 vue-ssg 的命令 vite-ssg build,然后我们会发现,运行直接报错。
我们需要在 vite.config.ts 文件中添加一些配置:
1 | resolve: { |
这样就可以解决这个问题。
TypeScript
很久之前,我就开始使用 TypeScript 了,现在开了一个新的项目,使用了 Vue3 和 TypeScript。
故复习一遍,做一些记录。
TypeScript 是 JavaScript 的超集,它可以编译成纯 JavaScript。TypeScript 是一种由微软开发的自由和开源的编程语言。
TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.
TypeScript 官方文档
使用
在 Vue3 中,我们可以直接使用 TypeScript,不需要额外的配置。
本地安装 TypeScript:
1 | npm install -g typescript |
类型推断
TypeScript 会根据你的代码,自动推断出类型。
1 | let a = 1; |
类型注解
我们可以使用类型注解,来明确的告诉 TypeScript 变量的类型。
1 | let a: number = 1; |
1 | let number = [1, 2, 3]; |
如果把第2行改成:
1 | const result = number.find((item) => item > 2) as number; |
这样就不会报错了。
基础类型以及联合类型
1 | let v1: string = 'abc'; |
数组
1 | let arr1: number[] = [1, 2, 3]; |
元组
1 | let tuple: [string, number] = ['a', 1]; |
枚举
1 | enum Color { |
void
1 | function log(message: string): void |
void 表示没有任何类型,通常用于函数没有返回值。
函数
1 | function add(a: number, b: number): number { |
接口
1 | interface Person { |
Type
type 是 TypeScript 的一个关键字,用来定义类型别名。
1 | type UserName = string | undefined; |
泛型
泛型是 TypeScript 的一个重要特性,它可以让我们在定义函数、接口、类的时候,可以使用任意类型。
1 | function myFn <T>(arg: T): T { |
这里的 T 是一个占位符,可以是任意类型。这个例子中,我们使用了泛型来定义一个函数,这个函数接受一个参数,返回这个参数。