深入浅出TypeScript | 青训营

42 阅读4分钟

TypeScript是一种由微软开发的开源编程语言,它是JavaScript的超集,为JavaScript添加了静态类型检查和其他一些新特性。TypeScript允许开发者编写更加可靠、可维护和可扩展的JavaScript代码,并在大型项目中减少错误和调试时间。

1. 基础类型

TypeScript提供了与JavaScript相似但更丰富的基础类型。以下是一些常见的基础类型:

  • number:表示数值类型,包括整数和浮点数。
  • string:表示字符串类型。
  • boolean:表示布尔类型,只能是true或false。
  • nullundefined:表示空值和未定义的值。
  • object:表示非原始类型,例如数组、函数、对象等。
  • array:表示数组类型,可以通过添加类型注解来指定数组元素的类型。
  • tuple:表示具有固定数量和顺序的元素的数组,每个元素可以有不同的类型。
  • enum:表示枚举类型,为一组具有命名值的常量定义一个名称。

2. 函数类型

TypeScript允许开发者定义函数的参数和返回值的类型。以下是一些常见的函数类型:

  • 参数类型注解:使用冒号(:)后跟类型,指定函数参数的类型。
  • 返回值类型注解:使用冒号(:)后跟类型,指定函数返回值的类型。
  • 箭头函数:使用箭头(=>)来定义函数。
function add(a: number, b: number): number {
  return a + b;
}

const result = add(5, 3); // 返回值为8

3. 接口

接口是一种用于描述对象结构的方式。通过接口,我们可以定义对象的属性和方法,并指定其类型。以下是接口的一些特点:

  • 属性定义:使用冒号(:)后跟类型,指定属性的类型。
  • 可选属性:在属性名后面加上问号(?),表示该属性可选。
  • 只读属性:使用readonly关键字,表示属性只能在创建时被赋值。
interface Person {
  name: string;
  age: number;
  gender?: string;
  readonly id: number;
}

const person: Person = {
  name: 'Alice',
  age: 25,
  id: 1001
};

4. 类

TypeScript支持面向对象编程,并提供了类的概念。类是一种用于创建对象的蓝图,它包含属性和方法。以下是一些类的特点:

  • 属性和方法:通过关键字public、private和protected来指定属性和方法的访问权限。
  • 构造函数:使用constructor关键字来定义构造函数,用于创建类的实例。
  • 继承:使用extends关键字,实现类的继承。
class Animal {
  private name: string;

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

  public getName(): string {
    return this.name;
  }
}

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

  public bark(): void {
    console.log('Woof!');
  }
}

const dog = new Dog('Bobby');
console.log(dog.getName()); // 输出: Bobby
dog.bark(); // 输出: Woof!

5. 高级类型

TypeScript提供了一些用于处理复杂类型操作的高级类型。以下是一些常见的高级类型:

  • 联合类型:使用|操作符,表示一个值可以是多种类型之一。
  • 交叉类型:使用&操作符,表示将多个类型合并为一个。
  • 类型保护:使用typeof和instanceof操作符,在运行时检查类型。
  • 映射类型:使用keyof操作符,遍历对象的属性,并创建新的类型。

6. 泛型

泛型是一种在编程中重用代码并增加灵活性的技术。使用泛型,我们可以编写可以适用于多种类型的函数和类。以下是一些关于泛型的使用示例:

  • 函数泛型:使用尖括号(<>)来定义一个或多个泛型类型参数,并在函数签名中使用它们。
function identity<T>(value: T): T {
  return value;
}

const result = identity('Hello'); // result 的类型为 string

7. 泛型的工具操作符

TypeScript提供了一些工具类型,用于操作和转换泛型类型。以下是一些常用的工具类型:

  • Partial :将泛型类型的所有属性设置为可选。

  • Pick<T, K> :从泛型类型中选择部分属性来创建新的类型。

  • Record<K, T> :创建一个由指定键和值类型构成的对象类型。

  • Exclude<T, U> :从T中排除可以赋值给U的类型。

  • Omit<T, K> :从T中删除指定属性。

    interface Person {
  name: string;
  age: number;
  gender: string;
}

type PartialPerson = Partial<Person>;
// 等同于
// interface PartialPerson {
//   name?: string;
//   age?: number;
//   gender?: string;
// }

type NewPerson = Pick<Person, 'name' | 'age'>;
// 等同于
// interface NewPerson {
//   name: string;
//   age: number;
// }

type GenderMap = Record<'male' | 'female', Person>;
// 等同于
// interface GenderMap {
//   male: Person;
//   female: Person;
// }

type ExcludeAge = Exclude<keyof Person, 'age'>;
// 等同于
// type ExcludeAge = 'name' | 'gender';

type OmitGender = Omit<Person, 'gender'>;
// 等同于
// interface OmitGender {
//   name: string;
//   age: number;
// }

首先,TS是JS的超集,增强了类型安全,提高了生产力,通过使用TypeScript,我们可以在项目中使用静态类型检查,提高代码质量和可维护性。此外,TypeScript还提供了丰富的类型系统和工具类型,使得编写复杂的代码变得更加容易和高效。