无法推送到联合类型数组

Cant push to UnionType array

我正在 TS 中使用 UnionTypes,我认为我可以创建一个可以使用它们的有效场景,但我不明白为什么这会因以下错误而中断:

Argument of type '{ name: string; }' is not assignable to parameter of type 'string & { name: string; }'

我知道“强制”这种局部方法的方法,但我想了解为什么这不起作用。

let newArray: string[] | { name: string }[] = new Array();

//just a boolean to know when is one type or the other
    if (isMultiple) {
      otherArray.forEach((item: { name: string }) => {
        newArray.push(item)
      })
    }
    else {
      otherArray.forEach((item: { name: string }) => {
        newArray.push(item.name)
      });
    }

    return newArray

除非你想允许混合数组(let newArray: (string | { name: string })[]),否则你可以使用

// just a boolean to know when is one type or the other
if (isMultiple) {
  const newArray: { name: string }[] = [];
  otherArray.forEach((item: { name: string }) => {
    newArray.push(item)
  });
  return newArray;
} else {
  const newArray: string[] = [];
  otherArray.forEach((item: { name: string }) => {
    newArray.push(item.name)
  });
  return newArray;
}

你不能同时拥有这两种类型的数组。您可以这样做并定义它,然后在 if 语句

中单独创建它
let newArray: string[] | { name: string }[];

//just a boolean to know when is one type or the other
    if (isMultiple) {
      newArray = new Array< { name : string }>();
      otherArray.forEach((item: { name: string }) => {
        newArray.push(item)
      })
    }
    else {
      newArray = new Array<string>();
      otherArrayforEach((item: { name: string }) => {
        newArray.push(item.name)
      });
    }

    return newArray