TypeScript概述

112 阅读3分钟

1. TypeScript 简介

  • 定义与目的

    • TypeScript 是 JavaScript 的一个超集,增加了静态类型检查。
    • 它的目标是开发大型应用,并提供编译时的错误检测和更好的工具支持。

2. 类型系统

  • 基本类型

    • 基本数据类型的介绍(如布尔值、数字、字符串等)
    • 特殊类型(如 anyunknownvoidnullundefined
  • 复合类型

    • 数组类型
    • 元组(Tuple)类型
    • 枚举(Enum)类型
  • 自定义类型

    • 接口(Interface)
    • 类型别名(Type Alias)
    • 字面量类型(Literal Types)

3. 函数

  • 函数声明

    • 参数类型和返回值类型的标注
  • 重载

    • 函数签名的多个版本以适应不同的调用方式
  • 箭头函数

4. 对象与类

  • 面向对象编程

    • 类(Class)的概念
    • 继承(Inheritance)
    • 多态(Polymorphism)
    • 封装(Encapsulation)
  • 修饰符

    • publicprivateprotected
  • 静态成员

    • 静态属性和方法

5. 泛型

  • 泛型的基本概念

    • 创建可复用的组件而不牺牲类型安全性
  • 泛型约束

    • 使用泛型参数时指定条件

6. 模块化

  • 模块的概念

    • 模块化的意义及其在组织代码中的作用
  • 导入与导出

    • 如何在不同文件之间共享代码

7. 工具与配置

  • 编译器选项

    • tsconfig.json 文件的使用
  • 类型定义文件

    • .d.ts 文件的作用
  • IDE 支持

    • 编辑器中对 TypeScript 的支持,例如 VSCode

8. 进阶主题

  • 装饰器

    • 装饰器的基础知识和应用场景
  • 命名空间

    • 命名空间用于组织代码,避免命名冲突
  • 高级类型

    • 条件类型(Conditional Types)、映射类型(Mapped Types)等

基本类型

typescript
深色版本
// 定义基本类型的变量
let isDone: boolean = false;
let age: number = 25;
let name: string = "Alice";

复合类型

数组

typescript
深色版本
// 定义一个字符串数组
let names: string[] = ["Alice", "Bob", "Charlie"];

元组(Tuple)

typescript
深色版本
// 定义一个元组,包含一个字符串和一个数字
let person: [string, number] = ["Dave", 30];

枚举(Enum)

typescript
深色版本
// 定义一个枚举类型
enum Color { Red, Green, Blue }
let colorName: string = Color[2]; // 使用索引获取名称,结果为 "Blue"

自定义类型

接口(Interface)

typescript
深色版本
// 定义一个接口
interface Person {
    name: string;
    age: number;
}

// 实现接口
let user: Person = {
    name: "Eve",
    age: 28,
};

类型别名(Type Alias)

typescript
深色版本
// 创建一个类型别名
type Point = {
    x: number;
    y: number;
};

let coordinate: Point = { x: 10, y: 20 };

函数

函数声明

typescript
深色版本
// 定义一个函数并指定参数和返回值类型
function add(a: number, b: number): number {
    return a + b;
}

箭头函数

typescript
深色版本
// 使用箭头函数简化语法
const greet = (name: string): string => `Hello, ${name}`;

typescript
深色版本
// 定义一个类
class Animal {
    public name: string;

    constructor(name: string) {
        this.name = name;
    }

    public speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

// 继承
class Dog extends Animal {
    constructor(name: string) {
        super(name);
    }

    public speak() {
        console.log(`${this.name} barks.`);
    }
}

let dog = new Dog("Rex");
dog.speak(); // 输出: Rex barks.

泛型

typescript
深色版本
// 定义一个泛型函数
function identity<T>(arg: T): T {
    return arg;
}

let output = identity<string>("myString"); // 指定泛型参数为 string

模块化

导入与导出

假设有一个文件math.ts

typescript
深色版本
// math.ts 文件内容
export function sum(a: number, b: number): number {
    return a + b;
}

在另一个文件中使用它:

typescript
深色版本
// 导入 math.ts 中的 sum 函数
import { sum } from './math';

console.log(sum(5, 10)); // 输出: 15

高级类型

条件类型

typescript
深色版本
// 条件类型用于基于某些条件来选择不同的类型
type TypeName<T> = T extends string ? "string" : "other";

映射类型

typescript
深色版本
// 映射类型可以用来创建新的类型,通常是对已有类型的属性进行转换
type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};