TypeScript 课程总结笔记
目录
一、TypeScript 简介
二、核心特性
三、基础语法
1. 字符串(String)
2. 数字(Number)
3. 布尔值(Boolean)
4. 数组(Array)
5. 元组(Tuple)
6. 函数声明
7. 函数重载
8. 基础接口
9. 高级接口特性
10.Void 和 Never
11.Null 和 Undefined
四、高级特性
4.1泛型
4.2装饰器
4.3联合类型与交叉类型
五、ts对比js
一、核心关系:超集与子集
代码兼容性
二、核心区别对比
1. 类型系统:最大的不同
JavaScript (动态类型)
TypeScript (静态类型)
2. 开发体验对比
JavaScript
TypeScript
三、TypeScript 的核心优势
1. 类型安全与错误预防
2. 更好的代码维护性
大型项目中的优势
六、总结
一、TypeScript 简介
TypeScript 是 JavaScript 的超集,由微软开发并开源。它为 JavaScript 添加了静态类型系统,使得代码更加健壮、可维护。TypeScript 最终会被编译为纯 JavaScript,因此可以在任何支持 JavaScript 的环境中运行。
二、核心特性
- 静态类型检查:TypeScript 允许在开发阶段进行类型检查,避免运行时错误。
- 类型推断:TypeScript 能根据赋值自动推断变量类型,减少显式类型注解的需求。
- 接口和类:支持面向对象编程,提供接口、类、继承等特性。
- 泛型:允许编写灵活且类型安全的代码。
- 模块化:支持 ES6 模块语法,便于代码组织。
三、基础语法
// 变量类型注解
let name: string = "John";
let age: number = 30;
let isActive: boolean = true;// 数组和元组
let numbers: number[] = [1, 2, 3];
let tuple: [string, number] = ["John", 30];// 函数类型
function greet(name: string): string {return `Hello, ${name}!`;
}// 接口
interface Person {name: string;age: number;
}const person: Person = {name: "John",age: 30
};
1. 字符串(String)
let name: string = "John";
let message: string = `Hello, ${name}!`; // 模板字符串// 特点:
// - 支持单引号、双引号、模板字符串
// - 自动类型推断:let greeting = "Hello" // 自动推断为 string
2. 数字(Number)
let age: number = 30;
let price: number = 99.99;
let binary: number = 0b1010; // 二进制
let octal: number = 0o744; // 八进制
let hex: number = 0xf00d; // 十六进制// 特点:
// - 不区分整数和浮点数
// - 支持各种进制表示法
// - 包含 NaN, Infinity
3. 布尔值(Boolean)
let isActive: boolean = true;
let isLoading: boolean = false;// 特点:
// - 只有 true 和 false 两个值
// - 不能使用 0/1 或 "true"/"false"
4. 数组(Array)
// 两种声明方式
let numbers: number[] = [1, 2, 3];
let strings: Array<string> = ["a", "b", "c"];// 只读数组
let readonlyNumbers: readonly number[] = [1, 2, 3];
// readonlyNumbers.push(4); // ❌ 错误:只读数组不能修改// 特点:
// - 类型统一:数组内所有元素类型相同
// - 支持泛型语法:Array<T>
// - 可设置为只读:readonly T[]
5. 元组(Tuple)
// 固定长度和类型的数组
let tuple: [string, number] = ["John", 30];
let point: [number, number, number] = [10, 20, 30];// 可选元素的元组
let optionalTuple: [string, number?] = ["hello"]; // 第二个元素可选// 剩余元素的元组
let restTuple: [string, ...number[]] = ["hello", 1, 2, 3];// 特点:
// - 固定长度和特定位置类型
// - 支持可选元素(?)
// - 支持剩余元素(...)
// - 常用于函数返回多个值
6. 函数声明
// 基础函数类型
function greet(name: string): string {return `Hello, ${name}!`;
}// 箭头函数
const greetArrow: (name: string) => string = (name) => {return `Hello, ${name}!`;
};// 可选参数和默认参数
function createUser(name: string, age?: number, country: string = "China"): void {console.log(`${name}, ${age}, ${country}`);
}
7. 函数重载
// 重载签名
function processInput(input: string): string;
function processInput(input: number): number;// 实现签名
function processInput(input: string | number): string | number {if (typeof input === "string") {return input.toUpperCase();} else {return input * 2;}
}// 使用
const result1 = processInput("hello"); // string
const result2 = processInput(10); // number
8. 基础接口
interface Person {name: string;age: number;
}const person: Person = {name: "John",age: 30
};// 可选属性
interface Config {url: string;timeout?: number; // 可选retry?: boolean; // 可选
}
9. 高级接口特性
// 只读属性
interface Point {readonly x: number;readonly y: number;
}// 索引签名
interface StringArray {[index: number]: string;
}// 函数类型接口
interface SearchFunc {(source: string, subString: string): boolean;
}
10.Void 和 Never
// void - 没有返回值
function logMessage(message: string): void {console.log(message);
}// never - 永远不会返回
function throwError(message: string): never {throw new Error(message);
}function infiniteLoop(): never {while (true) {// 无限循环}
}
11.Null 和 Undefined
let u: undefined = undefined;
let n: null = null;// 严格模式下需要显式声明
let maybeString: string | undefined = undefined;
let maybeNumber: number | null = null;
四、高级特性
4.1泛型
泛型允许在定义函数、接口或类时不预先指定具体类型,而是在使用时动态指定。
function identity<T>(arg: T): T {return arg;
}let output = identity<string>("hello");
4.2装饰器
function log(target: any, key: string) {console.log(`${key} was called`);
}class MyClass {@loggreet() {console.log("Hello!");}
}
4.3联合类型与交叉类型
type StringOrNumber = string | number;
type NameAndAge = { name: string } & { age: number };
五、ts对比js
一、核心关系:超集与子集

代码兼容性
// 所有合法的 JavaScript 代码都是合法的 TypeScript 代码
// ✅ JavaScript 代码在 TypeScript 中完全兼容// JavaScript
function greet(name) {return "Hello, " + name;
}// TypeScript (完全兼容上面的 JS 代码)
function greet(name: string): string {return "Hello, " + name;
}
二、核心区别对比
1. 类型系统:最大的不同
JavaScript (动态类型)
// 运行时才会发现错误
let user = { name: "John", age: 30 };
user.nmae = "Mike"; // ❌ 拼写错误,但运行时才会报错
console.log(user.nmae); // undefined// 变量类型可以随意改变
let data = "hello";
data = 42; // ✅ 允许
data = true; // ✅ 允许
data = { key: "value" }; // ✅ 允许
TypeScript (静态类型)
// 编译时就能发现错误
interface User {name: string;age: number;
}let user: User = { name: "John", age: 30 };
user.nmae = "Mike"; // ❌ 编译时错误:属性 'nmae' 不存在// 类型安全
let data: string = "hello";
data = 42; // ❌ 编译错误:不能将 number 分配给 string
2. 开发体验对比
JavaScript
// 需要运行时测试才能发现问题
function calculateTotal(price, quantity) {return price * quantity; // 如果传入字符串,会得到 NaN
}// 调用时可能出错
calculateTotal("10", "5"); // 返回 "105" (字符串拼接)
calculateTotal(10, 5); // 返回 50
TypeScript
// 编译时类型检查
function calculateTotal(price: number, quantity: number): number {return price * quantity;
}// 调用时类型安全
calculateTotal("10", "5"); // ❌ 编译错误:参数类型不匹配
calculateTotal(10, 5); // ✅ 正确
三、TypeScript 的核心优势
1. 类型安全与错误预防
// 接口定义 - 明确的契约
interface Product {id: number;name: string;price: number;inStock: boolean;
}// 函数使用接口 - 编译时验证
function displayProduct(product: Product): void {console.log(`${product.name}: $${product.price}`);// product.nme ❌ 拼写错误立即报错
}// 自动补全和智能提示
const product: Product = {id: 1,name: "Laptop",price: 999,inStock: true// 如果缺少 required 属性,编译时报错
};
2. 更好的代码维护性
大型项目中的优势
// 清晰的 API 契约
interface UserService {getUser(id: number): Promise<User>;createUser(user: Omit<User, 'id'>): Promise<User>;updateUser(id: number, updates: Partial<User>): Promise<User>;
}// 实现必须符合接口
class UserServiceImpl implements UserService {async getUser(id: number): Promise<User> {// 实现细节}// 如果缺少方法或签名不匹配,编译错误
}
六、总结
TypeScript 是 JavaScript 的超集,在保留 JavaScript 所有特性的基础上,引入了强大的静态类型系统。它不是一门全新的语言,而是为 JavaScript 添加了类型安全和开发效率的工具层。
核心优势
1.类型安全
2. 开发效率提升
3. 可维护性
1.核心特性体系
1. 基础类型系统
-
原始类型:string、number、boolean 等基础构建块
-
数组和元组:处理集合数据的类型安全方案
-
函数类型:确保函数输入输出的类型正确性
2. 高级类型特性
-
接口(Interface):定义对象形状的主要工具,支持继承和声明合并
-
类型别名(Type Alias):处理复杂类型操作和联合类型
-
泛型(Generics):创建可重用、类型安全的组件
-
联合类型与交叉类型:提供灵活而精确的类型组合能力
3. 类型操作能力
-
类型推断:自动推导变量类型,减少冗余注解
-
类型守卫:运行时类型检查与编译时类型收窄
-
映射类型:基于现有类型创建新类型
-
条件类型:根据条件动态决定类型
TypeScript 已经成为现代前端开发的事实标准,随着生态系统的不断完善和开发者社区的持续贡献,它在 Web 开发、Node.js 服务端、移动开发等领域的应用将更加广泛。掌握 TypeScript 不仅是学习一门工具,更是培养类型思维——这种思维方式将在整个编程生涯中持续创造价值。
TypeScript 让 JavaScript 开发从"写时快乐,维护痛苦"转变为"写时严谨,长期受益"的可持续发展模式。
