从 TypeScript 到 Bun:一份前端开发者的效率进阶笔记

从 TypeScript 到 Bun:前端开发者的效率进阶笔记

类型安全、异步编程、现代运行时,一次搞懂

写在前面

最近在整理代码笔记,发现一个小小的时间跨度:从最基础的 TypeScript 类型注解,到 Promiseasync/await 的异步处理,再到原生 DOM 事件监听,最后接触到 Bun 这个新兴的 JavaScript 运行时。

这恰好是一条前端开发者从"会用"到"懂原理"再到"追前沿"的成长路径。今天就把这些零散的笔记整理成一篇完整的文章,分享给大家。


一、TypeScript:给 JavaScript 穿上"防弹衣"

为什么需要 TypeScript?

JavaScript 是弱类型语言,这既是它的灵活之处,也是容易出错的地方。

typescript

ini 复制代码
// 这段代码不会报错,但结果可能让你意外
let age = "18";
let nextAge = age + 1;  // "181" 而不是 19

TypeScript 作为 JS 的超集,最大的价值就是静态类型检查

基础示例

typescript

typescript 复制代码
const nickname: string = "9527";
const age: number = 18;
console.log(`我是${nickname},我今年${age}岁`);

💡 小贴士:TypeScript 不会影响运行时性能,编译后就是干净的 JS 代码。现在 AI Agent 开发基本都标配 TS。


二、异步编程:从回调地狱到优雅的 async/await

封装一个 sleep 函数

很多时候我们需要让程序"等一等",比如轮询、动画、节流等场景。

typescript

javascript 复制代码
function sleep(t: number) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, t);
  });
}

使用 async/await 同步化异步任务

typescript

javascript 复制代码
async function main() {
  console.log('--start--');
  await sleep(2000);  // 等待 2 秒
  console.log('--end--');
}

main();

输出结果:

text

css 复制代码
--start--
(等待 2 秒)
--end--

await 后面必须跟一个 Promise,这正是 sleep 函数返回的类型。这种写法让异步代码读起来像同步代码,可读性大幅提升。


三、DOM 事件:你可能忽略的细节

来看一个简单的输入框监听:

html

typescript 复制代码
<input type="text" id="ipt">

<script>
  const ipt = document.getElementById("ipt");
  ipt.addEventListener("change", function (event) {
    console.log(event.target.value);
  })
</script>

容易踩的坑

  1. 事件类型选错change 事件在输入框失去焦点时触发,如果希望实时监听,应该用 input 事件。
  2. 值类型问题event.target.value 永远是字符串,即使你输入的是数字。

javascript

csharp 复制代码
// 你以为在做加法,实际在做拼接
let value = event.target.value;  // "100"
let result = value + 50;         // "10050"

改进建议

javascript

javascript 复制代码
ipt.addEventListener("input", (event) => {
  let num = Number(event.target.value);
  if (!isNaN(num)) {
    console.log(num + 50);  // 真正的加法
  }
});

四、Bun:Node.js 的强劲对手

Bun 是什么?

Bun 是一个比 Node 更快、开箱即用、零配置的 JavaScript/TypeScript 运行时 + 包管理器。

  • 🚀 性能更快:底层使用 Zig 语言,启动和执行速度都优于 Node
  • 📦 内置工具链:支持打包、转译、脚本运行,无需额外配置
  • 🔧 原生支持 TS :可以直接运行 .ts 文件,不需要 ts-node
  • 📚 兼容 Node.js API:大部分 npm 包可以直接使用

安装方式(Windows)

powershell

arduino 复制代码
powershell -c "irm bun.sh/install/windows | iex"

Mac/Linux 用户:

bash

arduino 复制代码
curl -fsSL https://bun.sh/install | bash

快速体验

bash

csharp 复制代码
# 运行 TypeScript 文件
bun run index.ts

# 初始化项目
bun init

# 安装依赖
bun add lodash

值得一提的是,Anthropic 收购了 Bun 团队,用于 Claude Code 底层。未来 AI 编程工具链很可能会更多依赖 Bun。


写在最后

知识点 核心要点
TypeScript 静态类型 + JS 超集,提升代码健壮性
async/await 让异步代码同步化,配合 Promise 使用
DOM 事件 注意事件类型和值类型的隐性转换
Bun 下一代 JS 运行时,更快 + 零配置 + 原生 TS

技术迭代很快,但底层的思维模型是不变的:类型思维、异步思维、事件驱动。把这几个概念吃透,无论工具怎么变,你都能快速上手。

希望这篇笔记对你也有帮助。如果觉得有用,欢迎点赞收藏~

相关推荐
2601_962055976 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
Lost of 程序猿8 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
QQ_21696290969 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
郑州光合科技余经理10 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒10 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
大辉狼_音频架构11 小时前
进阶:从源码编译 SOF 固件与 topology
后端
大辉狼_音频架构11 小时前
上板:让 SOF 在 FRDM-i.MX8MP 上跑起来
后端
大辉狼_音频架构12 小时前
FRDM-IMX8MP UUU 烧录 eMMC 指南
后端
运行时异常13 小时前
【WMS 仓储系统集成 AI Agent 实战】第 3 讲:Spring Security 6 + JWT——addFilterBefore 一词之差,全站 401
java·后端
LinMINGJing00713 小时前
PageHeaderData:Page 的页面头
后端