有没有办法在 TypeScript 中将多种类型的数据放入数组中?

Sub*_*kha 4 arrays types conditional-statements type-declaration typescript

这是我要问的一个例子。
假设我们有两个接口,Cats并且Dogs。如何制作一个可以同时容纳Cats和 的数组Dogs

interface Cats {
  name: string;
  age: number;
}

interface Dog {
  owner: string;
}

const cat1: Cats = {
  name: "Jimmy",
  age: 5,
}

const dog1: Dogs = {
  owner: "Bobby",
}

// The line below doesn't work how I think it would work
const animalsList: Array<Cats> | Array<Dogs> = [cat1, dog1];
Run Code Online (Sandbox Code Playgroud)

该变量animalsList应该能够同时包含CatsDogs,但我收到诸如
“类型Dogs无法分配给类型Array<Cats>”之类的错误

Sam*_*jig 8

如果我正确地阅读这个问题,您希望能够制作一个可以同时容纳猫和狗的数组。目前的方式Array<Cats> | Array<Dogs>意味着您可以拥有 a) 只能容纳猫的数组,或 b) 只能容纳狗的数组。

要解决这个问题,您需要一个可以同时容纳两者的数组。这样做的方法如下:

public animalsList: Array<Cats | Dogs>;
Run Code Online (Sandbox Code Playgroud)

管道 ( |) 的新位置表明该数组是一个可以同时容纳猫和狗的数组。

@cherryblossom提到的另一个选择是:

public animalsList: (Cats | Dogs)[];
Run Code Online (Sandbox Code Playgroud)

其工作原理类似