TypeScript 学习笔记
1. TypeScript 概述
JavaScript 的超集:TypeScript 是 JavaScript 的超集,添加了静态类型和其他特性。
类型检查:在开发阶段通过类型检查发现错误,增强代码的健壮性。
扩展性强:可以直接使用现有的 JavaScript 代码,并向项目逐步引入 TypeScript。
2. 安装与配置
使用
npm install -g typescript安装 TypeScript。使用
tsc命令编译.ts文件(编译时一定要先保存ts文件,否则会生成空的js文件)。创建
tsconfig.json配置文件,简化编译步骤并自定义编译选项。
3. 基本类型
原始类型:
string,number,boolean,null,undefined,symbol。数组类型:
number[]或Array<number>表示数字数组。元组类型:
[string, number],用于表示固定长度和类型的数组。枚举类型:使用
enum声明一组命名常量。any 类型:适用于任何类型,但会丧失类型检查优势。
void 类型:表示函数没有返回值。
never 类型:用于不会产生值的类型,如抛出错误的函数。
4. 接口 (Interfaces)
用于定义对象的结构,如属性和方法。
可扩展,通过
extends继承其他接口。支持可选属性和只读属性。
interface Person {
readonly id: number;
name: string;
age?: number;
}5. 类 (Classes)
支持面向对象编程,包含
public、private、protected修饰符。支持继承,通过
extends关键字。支持接口的实现,通过
implements关键字。使用构造函数
constructor初始化类的实例属性。
class Animal {
constructor(public name: string) {}
move(distance: number) {
console.log(`${this.name} moved ${distance} meters`);
}
}6. 函数类型
函数声明:使用
function关键字定义函数。箭头函数:简洁的函数表达式。
可选参数:使用
?标记可选参数。默认参数:定义默认值的参数。
剩余参数:用
...表示不确定数量的参数。
function add(x: number, y: number = 10): number {
return x + y;
}7. 泛型 (Generics)
提高代码的复用性,使函数、类和接口可以处理不同的数据类型。
使用
<T>定义泛型参数,表示类型变量。
function identity<T>(arg: T): T {
return arg;
}8. 类型推断和类型断言
类型推断:TypeScript 会自动推断变量类型。
类型断言:通过
as或<type>明确指定类型,告诉编译器如何理解变量。
let someValue: any = "hello";
let strLength: number = (someValue as string).length;9. 类型别名 (Type Aliases)
使用
type关键字为类型定义别名,简化代码。类型别名可以组合联合类型和交叉类型。
type Point = { x: number; y: number };10. 模块与命名空间
模块:在文件间导入导出代码块,使用
import和export。命名空间:将相关的变量、函数、类组织在一起,使用
namespace定义。
11. 高级类型
联合类型 (Union Types):允许变量有多种可能的类型。
交叉类型 (Intersection Types):将多个类型合并成一个。
类型守卫 (Type Guards):使用
typeof、instanceof等关键字检查类型。条件类型:根据条件动态生成类型。
12. 装饰器 (Decorators)
装饰器简介:装饰器是一种特殊的声明,用于修改类、方法、属性或参数的行为。需要启用
experimentalDecorators。种类:包括类装饰器、方法装饰器、属性装饰器、参数装饰器。
常见用法:常用于依赖注入、日志记录、验证等。
function log(target: any, key: string) {
console.log(`${key} was called`);
}
class Example {
@log
sayHello() {
console.log("Hello");
}
}13. 命名空间 (Namespaces)
命名空间的作用:用于将相关的代码分组,避免全局命名冲突,类似模块的作用。
定义方式:使用
namespace关键字,并在export导出内部成员以便外部使用。命名空间合并:同名命名空间可以自动合并。
namespace Utils {
export function log(msg: string) {
console.log(msg);
}
}
Utils.log("Hello, World");