typescript类型问题

type Arr = number[] | string[];
type Arr1 = Array<string | number>;

const arr: Arr = [];
arr.push('123');

image.png
image.png

请问,为何使用Arr1不报错,Arr报错?

阅读 109
评论
    2 个回答

    第一个类型表示这个数组要么全都是 number,要么全都是 string,二者不可交叉出现。

    第二个类型表示这个数组每个元素要么是 number,要么是 string,二者可以交叉出现。

    而你用第一种类型的时候:

    const arr: Arr = [];

    此时 arr 里到底应该必须只存 number 还是必须只 string 是未知的,所以后面你必须先断言才可以 push。

      按照你的想法,是你的语法问题,需要用联合类型,这样就可以了

      type Arr = (string|number)[];
      let arr:Arr = [];
      arr.push("123");
        撰写回答

        登录后参与交流、获取后续更新提醒

        相似问题
        推荐文章