TS 从入门到深度掌握,晋级TypeScript高手

53 阅读7分钟

TS 从入门到深度掌握,晋级TypeScript高手

TS 从入门到深度掌握,晋级TypeScript高手

获取ZY↑↑方打开链接↑↑

TS 从入门到深度掌握,晋级 TypeScript 高手

TypeScript 是一种静态类型的编程语言,它是 JavaScript 的超集,提供了更强的类型检查和面向对象的特性,极大地提高了代码的可维护性和健壮性。本文将从基础概念讲起,逐步引导你深入学习 TypeScript,帮助你成为一名 TypeScript 高手。

一、TypeScript 基础

  1. 什么是 TypeScript
  2. TypeScript 是 Microsoft 开发的一种开源编程语言,它是 JavaScript 的超集,添加了静态类型检查和其他高级特性。
  3. TypeScript 代码最终会被编译成 JavaScript 代码,可以在任何支持 JavaScript 的环境中运行。
  4. 安装 TypeScript
  5. 使用 npm 安装 TypeScript:
  6. sh
  7. 浅色版本
  8. npm install -g typescript
  9. 安装完后,可以使用 tsc 命令编译 TypeScript 代码。
  10. 基本语法
  11. 变量声明:使用 let 和 const 声明变量,并指定类型。
  12. typescript
  13. 浅色版本
  14. let name: string = "Alice"; const age: number = 30;
  15. 函数:定义函数时可以指定参数类型和返回类型。
  16. typescript
  17. 浅色版本
  18. function add(a: number, b: number): number { return a + b; }
  19. 接口:定义对象的结构,确保对象具有特定的属性和方法。
  20. typescript
  21. 浅色版本
  22. interface Person { name: string; age: number; }
  23. :支持面向对象编程,包括类、继承、接口等。
  24. typescript
  25. 浅色版本
  26. class Animal { name: string; constructor(name: string) { this.name = name; } move(distanceInMeters: number = 0) { console.log(${this.name} moved ${distanceInMeters}m.); } }
  27. 枚举:定义一组命名的常量。
  28. typescript
  29. 浅色版本
  30. enum Color { Red, Green, Blue } let c: Color = Color.Green;
  31. 泛型:创建可复用的组件,允许在函数、接口和类中使用类型参数。
  32. typescript
  33. 浅色版本
  34. function identity(arg: T): T { return arg; }
  35. 类型注解
  36. 基本类型:如 string、number、boolean、null、undefined、any、void、never。
  37. 数组和元组:使用 [] 表示数组,使用 [type1, type2] 表示元组。
  38. typescript
  39. 浅色版本
  40. let list: number[] = [1, 2, 3]; let x: [string, number] = ["hello", 10];
  41. 联合类型和交叉类型:使用 | 表示联合类型,使用 & 表示交叉类型。
  42. typescript
  43. 浅色版本
  44. let value: string | number = "hello"; value = 10;
  45. 类型断言:使用 as 或 进行类型断言。
  46. typescript
  47. 浅色版本
  48. let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;
  49. 模块化
  50. 模块:使用 import 和 export 关键字进行模块化开发。
  51. typescript
  52. 浅色版本
  53. // math.ts export function add(a: number, b: number): number { return a + b; } // app.ts import { add } from './math'; console.log(add(1, 2));
  54. 命名空间:用于组织和隔离代码,避免命名冲突。
  55. typescript
  56. 浅色版本
  57. namespace Shapes { export class Circle { radius: number; constructor(radius: number) { this.radius = radius; } } }
  58. 工具和配置
  59. tsconfig.json:配置 TypeScript 编译选项,如输出目录、模块系统等。
  60. json
  61. 浅色版本
  62. { "compilerOptions": { "target": "ES6", "module": "commonjs", "outDir": "./dist", "strict": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] }
  63. 编辑器支持:大多数现代编辑器(如 VS Code、WebStorm)都提供了良好的 TypeScript 支持。

二、进阶主题

  1. 高级类型
  2. 类型别名:为类型创建别名,提高代码的可读性。
  3. typescript
  4. 浅色版本
  5. type Name = string; type NameOrNumber = Name | number;
  6. 接口 vs 类型别名:接口和类型别名在很多情况下可以互换,但有一些细微的区别。
  7. typescript
  8. 浅色版本
  9. interface Point { x: number; y: number; } type Point2 = { x: number; y: number; };
  10. 索引类型:使用索引签名定义对象的键值对类型。
  11. typescript
  12. 浅色版本
  13. interface StringArray { [index: number]: string; }
  14. 映射类型:使用映射类型创建新的类型。
  15. typescript
  16. 浅色版本
  17. type Keys = "option1" | "option2"; type Flags = { [K in Keys]: boolean };
  18. 装饰器
  19. 类装饰器:修改类的行为。
  20. typescript
  21. 浅色版本
  22. function readonly(target: any, key: string, desc: PropertyDescriptor) { desc.writable = false; } class Example { @readonly name: string = "Alice"; }
  23. 属性装饰器:修改类的属性。
  24. 方法装饰器:修改类的方法。
  25. 参数装饰器:修改类的方法参数。
  26. 模块解析
  27. 路径映射:使用 paths 配置模块路径映射。
  28. json
  29. 浅色版本
  30. { "compilerOptions": { "baseUrl": ".", "paths": { "@/": ["src/"] } } }
  31. 类型声明文件:使用 .d.ts 文件提供类型声明,支持第三方库的类型检查。
  32. 项目结构和最佳实践
  33. 目录结构:合理组织项目目录,便于管理和维护。
  34. 浅色版本
  35. my-project/ ├── src/ │ ├── components/ │ ├── services/ │ ├── utils/ │ ├── types/ │ ├── app.ts │ └── index.ts ├── tests/ ├── .eslintrc.json ├── .prettierrc ├── tsconfig.json ├── package.json └── README.md
  36. 代码规范:使用 ESLint 和 Prettier 进行代码规范和格式化。
  37. 单元测试:使用 Jest 进行单元测试,确保代码的正确性。
  38. 持续集成:使用 CI/CD 工具(如 Jenkins、GitHub Actions)进行持续集成和持续交付。

三、实战项目:构建一个简单的任务管理应用

  1. 项目需求分析
  2. 功能:用户可以添加、删除和标记任务为已完成。
  3. 页面:任务列表页、任务详情页。
  4. 项目结构
  5. 目录结构
  6. 浅色版本
  7. task-manager/ ├── src/ │ ├── components/ │ ├── pages/ │ ├── services/ │ ├── types/ │ ├── App.tsx │ ├── index.tsx │ └── tsconfig.json ├── public/ ├── package.json └── README.md
  8. 环境搭建
  9. 创建项目:使用 Create React App 创建一个 React 项目,并启用 TypeScript 支持。
  10. sh
  11. 浅色版本
  12. npx create-react-app task-manager --template typescript cd task-manager npm start
  13. 安装依赖:安装必要的依赖,如 axios 用于网络请求。
  14. sh
  15. 浅色版本
  16. npm install axios
  17. 项目开发
  18. 定义类型
  19. 在 types 目录下定义任务和任务列表的类型。
  20. 例如,定义 Task 接口,包含任务的 ID、标题、描述和完成状态。
  21. typescript
  22. 浅色版本
  23. interface Task { id: number; title: string; description: string; completed: boolean; }
  24. 创建组件
  25. 任务列表组件:展示所有任务,支持添加和删除任务。
  26. 任务详情组件:展示任务的详细信息,支持标记为已完成。
  27. typescript
  28. 浅色版本
  29. // TaskList.tsx import React, { useState } from 'react'; import { Task } from '../types'; interface Props { tasks: Task[]; onAddTask: (task: Task) => void; onDeleteTask: (id: number) => void; } const TaskList: React.FC = ({ tasks, onAddTask, onDeleteTask }) => { const [newTask, setNewTask] = useState({ id: Date.now(), title: '', description: '', completed: false }); const handleAddTask = () => { onAddTask(newTask); setNewTask({ id: Date.now(), title: '', description: '', completed: false }); }; return (
    <input type="text" placeholder="Title" value={newTask.title} onChange={(e) => setNewTask({ ...newTask, title: e.target.value })} /> <input type="text" placeholder="Description" value={newTask.description} onChange={(e) => setNewTask({ ...newTask, description: e.target.value })} /> Add Task
      {tasks.map((task) => (
    • {task.title} - {task.description} <button onClick={() => onDeleteTask(task.id)}>Delete
    • ))}
    ); }; export default TaskList;
  30. 创建页面
  31. 任务列表页:集成任务列表组件,展示所有任务。
  32. 任务详情页:集成任务详情组件,展示任务的详细信息。
  33. 网络请求
  34. 使用 axios 发送网络请求,获取任务列表和更新任务状态。
  35. 例如,定义一个 getTasks 函数,从后端获取任务列表。
  36. typescript
  37. 浅色版本
  38. // services/taskService.ts import axios from 'axios'; interface Task { id: number; title: string; description: string; completed: boolean; } const getTasks = async (): Promise<Task[]> => { const response = await axios.get('/api/tasks'); return response.data; }; const addTask = async (task: Task): Promise => { await axios.post('/api/tasks', task); }; const deleteTask = async (id: number): Promise => { await axios.delete(/api/tasks/${id}); }; export { getTasks, addTask, deleteTask };
  39. 状态管理
  40. 使用 React 的 useState 和 useEffect 钩子管理组件的状态。
  41. 例如,在任务列表组件中,使用 useState 管理任务列表的状态。
  42. typescript
  43. 浅色版本
  44. // App.tsx import React, { useState, useEffect } from 'react'; import TaskList from './components/TaskList'; import { getTasks, addTask, deleteTask } from './services/taskService'; import { Task } from './types'; const App: React.FC = () => { const [tasks, setTasks] = useState<Task[]>([]); useEffect(() => { const fetchTasks = async () => { const fetchedTasks = await getTasks(); setTasks(fetchedTasks); }; fetchTasks(); }, []); const handleAddTask = (task: Task) => { addTask(task); setTasks([...tasks, task]); }; const handleDeleteTask = (id: number) => { deleteTask(id); setTasks(tasks.filter((task) => task.id !== id)); }; return (

    Task Manager

    ); }; export default App;
  45. 测试与调试
  46. 单元测试:使用 Jest 进行单元测试,确保组件的功能正确。
  47. 调试工具:使用 Chrome DevTools 或 VS Code 的调试功能进行调试,确保应用的稳定性和性能。
  48. 部署
  49. 构建项目:使用 npm run build 命令构建项目,生成生产环境的代码。
  50. 部署:将构建后的代码部署到服务器或静态网站托管服务,如 Netlify、Vercel 等。

四、总结

通过本文的系统讲解和实战项目,你应该已经对 TypeScript 有了较为全面的理解,并掌握了从基础到高级的各种特性。TypeScript 的静态类型检查和面向对象的特性,使得代码更加健壮和易于维护。希望本文能帮助你在 TypeScript 开发的道路上更进一步,祝你开发顺利!