TypeScript 学习笔记

1. TypeScript 概述

  • JavaScript 的超集:TypeScript 是 JavaScript 的超集,添加了静态类型和其他特性。

  • 类型检查:在开发阶段通过类型检查发现错误,增强代码的健壮性。

  • 扩展性强:可以直接使用现有的 JavaScript 代码,并向项目逐步引入 TypeScript。

2. 安装与配置

  • 使用 npm install -g typescript 安装 TypeScript。

  • 使用 tsc 命令编译 .ts 文件(编译时一定要先保存ts文件,否则会生成空的js文件)。

  • 创建 tsconfig.json 配置文件,简化编译步骤并自定义编译选项。

3. 基本类型

  • 原始类型stringnumberbooleannullundefinedsymbol

  • 数组类型number[]Array<number> 表示数字数组。

  • 元组类型[string, number],用于表示固定长度和类型的数组。

  • 枚举类型:使用 enum 声明一组命名常量。

  • any 类型:适用于任何类型,但会丧失类型检查优势。

  • void 类型:表示函数没有返回值。

  • never 类型:用于不会产生值的类型,如抛出错误的函数。

4. 接口 (Interfaces)

  • 用于定义对象的结构,如属性和方法。

  • 可扩展,通过 extends 继承其他接口。

  • 支持可选属性和只读属性。

interface Person {
    readonly id: number;
    name: string;
    age?: number;
}

5. 类 (Classes)

  • 支持面向对象编程,包含 publicprivateprotected 修饰符。

  • 支持继承,通过 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. 模块与命名空间

  • 模块:在文件间导入导出代码块,使用 importexport

  • 命名空间:将相关的变量、函数、类组织在一起,使用 namespace 定义。

11. 高级类型

  • 联合类型 (Union Types):允许变量有多种可能的类型。

  • 交叉类型 (Intersection Types):将多个类型合并成一个。

  • 类型守卫 (Type Guards):使用 typeofinstanceof 等关键字检查类型。

  • 条件类型:根据条件动态生成类型。

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");


TypeScript 学习笔记
http://localhost:8090//archives/typescript-xue-xi-bi-ji
作者
潘显镇
发布于
2024年11月11日
许可协议