在TypeScript中,类型系统是其核心特性之一,它为JavaScript添加了静态类型检查,从而增强了代码的可维护性和可读性。掌握TypeScript的类型定义与类型转换是高效使用TypeScript的关键。以下是一些要点,帮助你轻松掌握这些技巧。

1. 基础类型定义

TypeScript提供了丰富的内置类型,如numberstringbooleananyvoidnullundefined等。你可以直接使用这些类型来定义变量:

let age: number = 25;
let name: string = "张三";
let isStudent: boolean = true;

2. 数组与元组

你可以使用Array<T>来定义数组,其中T是数组元素的类型:

let numbers: Array<number> = [1, 2, 3];

元组(Tuple)是一个固定长度的数组,每个元素都有明确的类型:

let point: [number, number] = [1, 2];

3. 接口(Interface)

接口用于定义对象的形状,可以包含多个属性,每个属性都有对应的类型:

interface Person {
  name: string;
  age: number;
}
let person: Person = {
  name: "李四",
  age: 30
};

4. 类(Class)

类是TypeScript中的另一个重要概念,用于定义具有属性和方法的对象:

class Animal {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  speak() {
    console.log(`${this.name} says something`);
  }
}
let dog = new Animal("旺财");
dog.speak();

5. 类型别名(Type Aliases)

类型别名可以为类型创建一个别名,使代码更易于阅读和维护:

type ID = number;
let userId: ID = 123456;

6. 高级类型

TypeScript还提供了高级类型,如联合类型(Union)、交叉类型(Intersection)、泛型(Generics)等。

联合类型

联合类型允许你定义一个变量可以具有多种类型:

let age: number | string = 25;
age = 30; // 正确
age = "三十"; // 正确

交叉类型

交叉类型将多个类型合并为一个类型:

interface A {
  a: number;
}
interface B {
  b: string;
}
let ab: A & B = { a: 1, b: "2" };

泛型

泛型允许你在定义函数、接口和类时,不指定具体的类型,而是在使用时再指定:

function identity<T>(arg: T): T {
  return arg;
}
let output = identity<string>("我的类型是字符串");

7. 类型转换

在TypeScript中,类型转换通常通过类型断言(Type Assertions)来实现。类型断言是告诉编译器,尽管代码表面上的类型是T,但实际上你确信这个变量的类型是U

let value: any = "这是一个字符串";
let strLength: number = (value as string).length;

此外,TypeScript还提供了类型守卫(Type Guards)来检查变量是否符合某个类型:

function isString(input: any): input is string {
  return typeof input === "string";
}

let value: any = "这是一个字符串";
if (isString(value)) {
  console.log(value.toUpperCase());
}

通过以上要点,你将能够轻松掌握TypeScript的类型定义与类型转换技巧。掌握这些技巧将使你的TypeScript代码更加健壮、易于维护和阅读。