从 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

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

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

相关推荐
IT_陈寒3 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
ServBay4 小时前
为什么说 MCP 是 2026 年开发者必须掌握的黄金协议?
后端·mcp
程序员夏洛4 小时前
Spring Boot 多模块项目中 IDEA 提示 Cannot resolve symbol 的一次排查记录
后端
子兮曰4 小时前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
子兮曰4 小时前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
爱勇宝6 小时前
从 Ctrl+CV 到 Enter:程序员正在失去什么
前端·后端·程序员
码事漫谈6 小时前
EdgeOne Makers + WorkBuddy:零基础也能快速搭建可上线的 AI 智能体(附图文教程)
后端
像我这样帅的人丶你还6 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩6 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
烤代码的吐司君7 小时前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端