Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 微信小程序学习记录
  • WebAssembly
  • Vue.js 从入门到实践:构建现代前端应用
  • React.js-从入门到精通-构建现代用户界面
  • React-从入门到精通-构建现代Web应用
  • React-从入门到精通-构建现代前端应用
  • React 开发指南:从入门到精通
  • React框架入门:构建现代用户界面
  • TypeScript:为JavaScript添加类型安全
    • 前言
    • 为什么需要TypeScript?
      • 动态类型的痛点
      • TypeScript如何解决
    • TypeScript核心概念
      • 1. 基本类型
      • 2. 接口与类型别名
      • 3. 函数类型
    • 实战:从JS迁移到TS
      • 1. 渐进式迁移
      • 2. 类型声明文件
      • 3. 工具集成
    • 结语
  • TypeScript在前端开发中的应用:从入门到实践
  • Vue.js 集成 TypeScript:构建类型安全的前端应用
  • Webpack从入门到实践:构建现代前端应用
  • 前端工程化:构建现代化开发流程
  • 前端工程化:构建高效、可维护的现代Web应用
  • 前端工程化:构建高效现代Web应用的艺术
  • 响应式设计:构建适配所有设备的现代Web应用
  • 前端状态管理:从Flux到现代解决方案
  • 前端性能优化-打造极速流畅的用户体验
  • 前端测试-构建可靠且高质量的用户界面
  • 前端安全防护-构建安全可靠的Web应用
  • 前端微前端架构-构建可扩展的大型前端应用
  • 前端数据可视化-打造直观易懂的数据呈现
  • 前端国际化-构建面向全球用户的多语言Web应用
  • 前端无障碍访问-构建包容性的Web体验
  • 前端组件化与组件库设计-构建可复用的高质量组件
  • 前端AI与机器学习集成:构建智能化用户界面
  • 前端架构设计模式-构建可扩展的现代Web应用
  • frontend
Jorgen
2023-10-15
目录

TypeScript:为JavaScript添加类型安全

# 前言

在JavaScript的世界里,我们常常会遇到这样的场景:传着传着参数就丢了类型。😂 作为前端开发者,我们既享受JS的灵活,又常常被其动态类型坑得苦不堪言。今天我要聊聊TypeScript——这个让JS代码变得"有规矩"的神器!

"TypeScript is JavaScript that scales" —— 微软官方标语

提示

TypeScript是JavaScript的超集,添加了可选的静态类型系统和基于类的面向对象特性。

# 为什么需要TypeScript?

# 动态类型的痛点

// 🤔 看似没问题,但运行时才会发现错误
function calculateTotal(items) {
  return items.reduce((sum, item) => sum + item.price, 0);
}

// 调用方式1:正常工作
const products = [{ price: 10 }, { price: 20 }];
console.log(calculateTotal(products)); // 30

// 调用方式2:💥 运行时错误
const mixed = [{ price: 5 }, { name: "免费商品" }];
console.log(calculateTotal(mixed)); // NaN
1
2
3
4
5
6
7
8
9
10
11
12

# TypeScript如何解决

// 类型注解让错误在编译时就被发现
interface Product {
  price: number;
}

function calculateTotal(items: Product[]): number {
  return items.reduce((sum, item) => sum + item.price, 0);
}

// 编译器会立即报错:类型不匹配
const mixed: Product[] = [{ price: 5 }, { name: "免费商品" }];
// ~~~~~~~~~~~ 这里会报错:缺少price属性
1
2
3
4
5
6
7
8
9
10
11
12

# TypeScript核心概念

# 1. 基本类型

// 原始类型
let id: number = 123;
let username: string = "Jorgen";
let isActive: boolean = true;
let data: any = "可以是任意类型"; // 避免滥用any!

// 数组类型
const numbers: number[] = [1, 2, 3];
const fruits: Array<string> = ["apple", "banana"];

// 元组(固定长度数组)
const userInfo: [string, number] = ["Jorgen", 28];
1
2
3
4
5
6
7
8
9
10
11
12

THEOREM

TypeScript的类型系统是结构化的,不是名义化的。这意味着只要结构匹配,类型就兼容。

# 2. 接口与类型别名

// 接口定义对象结构
interface User {
  id: number;
  name: string;
  readonly email: string; // 只读属性
  optionalProp?: string; // 可选属性
}

// 类型别名
type ID = string | number;

// 实现接口
const user: User = {
  id: 1,
  name: "Jorgen",
  email: "jorgen@example.com"
};

// 尝试修改只读属性会报错
// user.email = "new@example.com"; // ❌ 错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3. 函数类型

// 明确参数和返回值类型
function add(a: number, b: number): number {
  return a + b;
}

// 箭头函数
const multiply = (x: number, y: number): number => x * y;

// 函数重载
function parseValue(value: string): number;
function parseValue(value: number): string;
function parseValue(value: string | number): string | number {
  return typeof value === 'string' ? parseInt(value) : value.toString();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 实战:从JS迁移到TS

# 1. 渐进式迁移

# 安装TypeScript
npm install -g typescript

# 初始化配置
tsc --init

# 生成tsconfig.json
1
2
3
4
5
6
7

# 2. 类型声明文件

// 当使用第三方JS库时,添加类型声明
// @types/lodash 安装类型定义
import _ from 'lodash';

// 使用带类型提示的lodash
const users = [{ id: 1, name: "Jorgen" }];
const user = _.find(users, { id: 1 });
1
2
3
4
5
6
7

# 3. 工具集成

  • VS Code:开箱即用的TypeScript支持
  • Webpack:使用ts-loader
  • Vite:原生支持TypeScript
// vite.config.ts
import { defineConfig } from 'vite'

export default defineConfig({
  // TypeScript配置
  resolve: {
    alias: {
      '@': '/src'
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11

# 结语

TypeScript不是要取代JavaScript,而是让它变得更好。通过添加类型系统,我们获得了:

  1. 更早的错误捕获:在开发阶段发现潜在问题
  2. 更好的IDE支持:智能提示和重构
  3. 更清晰的代码文档:类型本身就是文档
  4. 更自信的重构:类型检查确保重构安全

"TypeScript不是负担,而是投资的未来" —— 我的心得

刚开始学习时可能会觉得类型约束繁琐,但当你体验到大型项目中类型系统带来的安全感时,就会明白这个选择多么明智。🚀

—— Jorgen,2023年10月

#TypeScript#JavaScript#类型系统
上次更新: 2026/01/28, 15:36:58
React框架入门:构建现代用户界面
TypeScript在前端开发中的应用:从入门到实践

← React框架入门:构建现代用户界面 TypeScript在前端开发中的应用:从入门到实践→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式