Typescritpt、ES6

ES6

ES6(ECMAScript 2015)是 JavaScript 语言的一次重大版本升级,引入了大量现代化特性,彻底改变了前端开发方式,也是 Vue3、TypeScript、模块化开发的基础。后续ES7/8小版本

  • 代码更简洁:箭头函数、解构赋值等特性减少冗余代码;
  • 支持模块化import/export 替代传统的全局变量 / 闭包方式;
  • 增强数据处理 :新增 Set/Map 数据结构、数组 / 对象扩展方法;
  • 支持面向对象class 语法简化原型链编程;
  • 异步编程优化Promise 解决回调地狱(后续 ES7/8 的 async/await 基于此)。

ES6核心特性

变量声明:let/const(替代 var):ES6 之前用 var 声明变量存在变量提升函数级作用域可重复声明 等问题,let/const 解决了这些痛点。

箭头函数(=>):简化函数写法,同时解决 this 指向问题(箭头函数无自己的 this,继承外层作用域的 this)。

解构赋值:快速从数组 / 对象中提取值,赋值给变量,简化代码。

模板字符串(``):替代传统字符串拼接,支持换行、嵌入变量 / 表达式。语法 :用反引号 ````` 包裹,变量 / 表达式用 ${} 嵌入。

模块化(import/export):ES6 原生支持模块化,是前端工程化的基础

扩展运算符(...):将数组 / 对象展开为多个元素 / 属性,常用于复制、合并、传参

类(class):简化原型链编程,提供更清晰的面向对象语法。

Promise(异步编程):解决回调地狱问题,是 async/await 的基础,Vue 中请求接口必用

数组扩展方法:ES6 新增了大量实用的数组方法,简化数据处理

Typescritpt

TypeScript(简称 TS)是 JavaScript(JS)的超集 ,核心是在 JS 基础上增加了静态类型系统.

既能兼容所有 JS 语法,又能在编译阶段提前发现类型错误,大幅提升大型项目(如 Vue3/Vben)的可维护性和开发效率。

  • 提前报错:编译阶段发现类型错误(如把字符串传给数字参数),避免运行时崩溃;
  • 代码提示:编辑器(VSCode)提供精准的自动补全、类型提示,减少查文档时间;
  • 代码可读性:类型注解让函数 / 变量的用途一目了然,尤其适合团队协作;
  • 兼容生态:完全兼容 JS,可渐进式接入(现有 JS 项目可逐步改为 TS)。

环境准备

  • 安装 TS:npm install -g typescript(全局安装);
  • 初始化 TS 配置:在项目根目录执行 tsc --init,生成 tsconfig.json(核心配置文件);
  • 编译 TS 文件:tsc 文件名.ts(会生成对应的 .js 文件);
  • Vue 项目中无需手动编译:Vue CLI/Vite 已内置 TS 编译能力,直接写 .vue/.ts 文件即可。
  • <script setup lang="ts"> 基础Vue3 单文件组件中,添加 lang="ts" 即可启用 TS,结合 defineProps/defineEmits 约束类型:

核心配置(tsconfig.json 关键项)

复制代码
{
  "compilerOptions": {
    "target": "ES6", // 编译目标 JS 版本(如 ES6/ESNext)
    "module": "ESNext", // 模块系统(如 ESModule/CommonJS)
    "strict": true, // 开启严格模式(必开!核心类型校验)
    "jsx": "preserve", // 支持 JSX(React/Vue 项目用)
    "moduleResolution": "node", // 模块解析方式(Node 风格)
    "baseUrl": ".", // 基础路径
    "paths": { "@/*": ["src/*"] }, // 路径别名(Vue 项目常用)
    "skipLibCheck": true, // 跳过第三方库类型检查(提升编译速度)
    "esModuleInterop": true // 兼容 CommonJS/ESModule 模块
  },
  "include": ["src/**/*"], // 要编译的文件
  "exclude": ["node_modules"] // 排除的文件
}

TS核心语法

基础类型注解

TS 为 JS 原生类型增加了类型注解 ,格式:变量名: 类型 = 值

TS 类型 说明 示例
string 字符串 const name: string = '张三'
number 数字(整数 / 浮点数) const age: number = 20
boolean 布尔值 const isLogin: boolean = true
array 数组 const list: number[] = [1,2,3]const list: Array<number> = [1,2,3]
object 对象(不推荐直接用) const user: object = { name: '张三' }
null/undefined 空值 / 未定义 const n: null = null
any 任意类型(禁用!失去 TS 意义) const x: any = '任意值'
void 无返回值(函数) function fn(): void { console.log('hi') }
never 永不返回(如抛出错误) function error(): never { throw new Error('错了') }

高级类型:接口(interface)

interface 是 TS 最核心的类型工具,用于约束对象 / 函数的结构,Vue 中常用于约束 API 参数、组件 Props 等

约束对象

复制代码
// 定义接口(首字母大写)
interface User {
  id: number; // 必选属性
  name: string;
  age?: number; // 可选属性(加 ?)
  readonly gender: string; // 只读属性(不可修改)
}

// 使用接口约束对象
const user: User = {
  id: 1,
  name: '张三',
  gender: '男' // age 可选,可省略
};
user.gender = '女'; // 报错:只读属性不能修改

约束函数

复制代码
interface LoginFn {
  (username: string, password: string): boolean;
}

// 实现函数
const login: LoginFn = (name: string, pwd: string): boolean => {
  return name === 'admin' && pwd === '123456';
};

接口继承(复用类型)

复制代码
interface BaseUser {
  id: number;
  name: string;
}

// 继承 BaseUser 的属性
interface AdminUser extends BaseUser {
  role: string; // 新增属性
}

const admin: AdminUser = {
  id: 2,
  name: '管理员',
  role: 'admin'
};

高级类型:类型别名(type)

type 是另一种类型定义方式,功能和 interface 类似,但更灵活(可定义基本类型、联合类型等)。

复制代码
// 定义基本类型别名
type Age = number;
const userAge: Age = 25;

// 定义对象类型别名
type User = {
  id: number;
  name: string;
};

// 联合类型(多个类型二选一)
type Status = 'success' | 'error' | 'loading';
const status: Status = 'success'; // 只能选这三个值

// 交叉类型(合并多个类型)
type BaseInfo = { id: number };
type UserInfo = { name: string };
type FullUser = BaseInfo & UserInfo; // 同时包含 id 和 name
const fullUser: FullUser = { id: 1, name: '张三' };

interface和type的区别

特性 interface type
扩展性 可多次定义,自动合并 不可重复定义,需用交叉类型
适用场景 约束对象 / 函数结构 定义基本类型、联合 / 交叉类型
继承 用 extends 继承 用 & 交叉实现继承

泛型(Generic)

泛型是 TS 中复用类型逻辑的核心,解决「类型不固定但需要约束」的问题(如数组、函数、组件的通用类型)。

类型断言(Type Assertion

类型断言用于「告诉 TS 我比你更清楚这个值的类型」,常用于类型不确定但开发者明确的场景(如 DOM 元素、接口返回值)语法:值 as 类型(推荐)或 <类型>值(Vue 中不推荐,和 JSX 冲突)。

ES6

相关推荐
用户3076752811271 小时前
《拒绝卡顿:深入解析 AI 流式 Markdown 的高性能渲染架构》
前端·javascript
Mertens18741 小时前
Zero-Doc:极简的 Spec Coding 落地指南
前端·javascript·ai编程
毛骗导演1 小时前
万字解析 OpenClaw 源码架构-跨平台应用之MacOS 应用
前端·架构
ZengLiangYi1 小时前
用 1300 行原生 JS 做了一个 Chrome DevTools 扩展,让前后端不再为接口报错截图扯皮
前端·javascript
sxq1 小时前
Flow Render: 像调用异步函数一样渲染 UI 组件
vue.js·react.js
A_Qyp1 小时前
JeechBoot前端表格内操作设置下拉
前端·javascript
YimWu1 小时前
面试官:OpenCode Agent 代理机制了解吗?
前端·agent·ai编程
小小程序员mono2 小时前
JS 与 Vue Router 导航方式对比
开发语言·javascript·vue.js
IT星宿2 小时前
smart-unit:一个优雅的 JavaScript 单位转换库,告别繁琐的依赖管理
前端·javascript·typescript