在Typescript中,联合类型(Union Types)是指可以取多个不同类型之一的值。使用联合类型可以定义一个变量可以为多种类型中的一种,这样可以增加代码的灵活性和可读性。

定义一个联合类型的变量,可以通过使用竖线(|)将多种类型列在一起:

let myVar: number | string;

上面的示例中,myVar 可以是一个数字或者一个字符串。

可以通过类型保护(Type Guards)来确定一个联合类型的变量的具体类型。Typescript提供了几种类型保护的方式,比如类型谓词、类型断言、typeof操作符等。

function isNumber(value: number | string): value is number {
  return typeof value === 'number';
}

let myVar: number | string = 123;

if (isNumber(myVar)) {
  console.log('myVar is a number');
} else {
  console.log('myVar is a string');
}

除了基本类型之外,还可以定义联合类型的自定义类型:

interface Dog {
  kind: 'dog';
  bark(): void;
}

interface Cat {
  kind: 'cat';
  meow(): void;
}

type Pet = Dog | Cat;

function playWithPet(pet: Pet) {
  if (pet.kind === 'dog') {
    pet.bark();
  } else {
    pet.meow();
  }
}

上面的示例中,Pet 类型是 DogCat 的联合类型,通过 kind 字段来进行类型保护判断。

总结一下,联合类型是Typescript中一种非常有用的高级特性,可以增加代码的灵活性和可读性。通过合理使用类型保护,可以更好地处理联合类型的变量。