如何在Typescript中连接两个ReadonlyArrays?

Tom*_*ers 7 arrays typescript typescript2.0

什么是在打字稿中将两个数组连接起来的推荐方法ReadonlyArray?考虑以下:

const strings1: ReadonlyArray<string> = ["foo"];
const strings2: ReadonlyArray<string> = ["bar"];

const allStrings = strings1.concat(strings2);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我strings2concat方法的参数中得到一个编译错误:

TS2345: Argument of type 'ReadonlyArray<string>' is not assignable to parameter of type 'string | string[]'. Type 'ReadonlyArray<string>' is not assignable to type 'string[]'. Property '[Symbol.unscopables]' is missing in type 'ReadonlyArray<string>'.

这有一定道理,如果我看分型为concatReadonlyArray:

concat(...items: (T | T[])[]): T[];

这感觉就像一个疏忽,因为ReadonlyArray当你使用ReadonlyArrays 时,结束两个s似乎是常见的事情.我错过了什么,还是有一个我错过的明显解决方案?

我看到的解决方案是:

  1. 扩展ReadonlyArray打字以添加我想要的定义
  2. 把我ReadonlyArray变成一个普通的数组:strings1.concat(strings2 as string[])
  3. 在结束之前首先创建一个新的普通数组: strings1.concat([].concat(strings2))

我正在使用Typescript 2.4.2.

Rob*_*sen 5

使用价差运算符:

const strings1: ReadonlyArray<string> = ["foo"];
const strings2: ReadonlyArray<string> = ["bar"];

const allStrings = [...strings1, ...strings2];
Run Code Online (Sandbox Code Playgroud)


vbr*_*aun 5

已在 Typescript 2.5.1 中修复,请参阅https://github.com/Microsoft/TypeScript/issues/17076