Javascript 正在查找将x或x[]转换为x[]的单行线

Javascript 正在查找将x或x[]转换为x[]的单行线,javascript,arrays,typescript,one-liner,Javascript,Arrays,Typescript,One Liner,我正在寻找短而有效的纯文本脚本一行,可以取代以下功能: function arrayOrMemberToArray<T>(input: T | T[]): T[] { if(Arrary.isArray(input)) return input return [input] } Array.concat在浏览器控制台中工作正常,但TS不允许: const x: number | number[] = 0 const y = [].concat(x) 错误:(27,21)T

我正在寻找短而有效的纯文本脚本一行,可以取代以下功能:

function arrayOrMemberToArray<T>(input: T | T[]): T[] {
  if(Arrary.isArray(input)) return input
  return [input]
}
Array.concat
在浏览器控制台中工作正常,但TS不允许:

const x: number | number[] = 0
const y = [].concat(x)
错误:(27,21)TS2769:没有与此调用匹配的重载。
重载2中的第1个“(…项:ConcatArray[]):never[]”,出现以下错误。
“number”类型的参数不能分配给“ConcatArray”类型的参数。
重载2,共2个“(…项:ConcatArray[]):never[]”,出现以下错误。
“number”类型的参数不能分配给“ConcatArray”类型的参数。

不确定为什么需要一行,但可以使用三元运算符:

function arrayOrMemberToArray<T>(input: T | T[]): T[] {
  return Array.isArray(input) ? input : [input];
}
函数数组MemberToArray(输入:T | T[]):T[]{
返回数组.isArray(输入)?输入:[input];
}

不确定为什么需要一行,但可以使用三元运算符:

function arrayOrMemberToArray<T>(input: T | T[]): T[] {
  return Array.isArray(input) ? input : [input];
}
函数数组MemberToArray(输入:T | T[]):T[]{
返回数组.isArray(输入)?输入:[input];
}

由于数组文本为空,
concat
解决方案不会进行类型检查。你需要写信

const arr = ([] as number[]).concat(input);
或者,您可以使用:


这不仅更短,而且更可取,因为它不依赖于输入的类型,而是实际检查数组。

由于数组文本为空,
concat
解决方案不会进行类型检查。你需要写信

const arr = ([] as number[]).concat(input);
或者,您可以使用:

这不仅更短,而且更可取,因为它不依赖于输入的大小,而是实际检查数组。

这似乎有效:

const x: number | number[] = 0
const y = ((): number[] => [])().concat(x)
console.log(y)
这似乎有效:

const x: number | number[] = 0
const y = ((): number[] => [])().concat(x)
console.log(y)

所谓一行代码,我的意思是我想用一个简短的一行代码片段替换整个函数,就像
Array.concat
示例所做的那样。我对问题进行了编辑以使其更清晰。我所说的一行代码是指我想用一个简短的一行代码片段替换整个函数,就像
Array.concat
示例所做的那样。我对这个问题进行了编辑以使其更清楚。我对Typescript一无所知,也没有安装它,但是像这样的东西呢:consty=(():t[]=>[])()。concat(x);我对Typescript一无所知,也没有安装它,但是像这样的东西呢:consty=(():t[]=>[])()。concat(x);为什么要使用iLife?我对Typescript一无所知,在大约1分钟前的编辑中也没有看到您的其他答案。@Bergi所以,这个问题的实际答案是我看到函数arrayOrMemberToArray可以将其输出定义为类型化数组,所以。。。我想也许我可以用箭头函数做同样的事情。为什么要使用IIFE?我对Typescript一无所知,而且在大约1分钟前的编辑中也没有看到你的其他答案。@Bergi所以,这个问题的一个实际答案是我看到函数arrayOrMemberToArray可以将其输出定义为类型化数组,所以。。。我想也许我可以用箭头函数做同样的事情。