在 TypeScript 中破坏字符串数组可选参数?

Destructing string array optional parameters in TypeScript?

我需要实现一个字符串连接函数,功能如下所示,

function concatenation(original: string, name1?, name2?){
  return original + name1 + name2;
}

但是,问题是,关于name可以有更多的参数;因此,这不是一种好的编码风格。我想把它改成如下所示。

function concatenation(original: string, name?:[string]){
  return original + ...name1;
}

但是这样一来,程序就会报错。我怎样才能实现它?

您可以将休息与 join 一起用作:

function concatenation(original: string, name1?, name2?) {
  return original + name1 + name2;
}
concatenation('Original', 'Name1', 'Name2', 'Name3');

这可以处理任意数量的字符串参数

function concatenation2(...names: string[]) {
  return names.join('');
}

concatenation2('Original', 'Name1', 'Name2', 'Name3');

function concatenation2(...names) {
  return names.join('');
}

console.log(concatenation2('Original', 'Name1', 'Name2', 'Name3'));

提供您的错误报告将使您更容易发现您的真实问题。

事实上,您的函数 concatenation 实际上所做的只是连接多个字符串变量,尽管您试图通过名称来区分它们。因为你想把变量放在函数的参数中,你可以简单地使用 destructuring assignment.

function concatenation(...items) {
    // `items` is an Array consisting of all the function arguments.
    items.join('');
}

concatenation(1,2,3) // "123"
concatenation("a", "bcd", "ef", "g", "h") // "abcdefgh"

并且请注意,您不能在 JavaScript 中使用 TypeScript 类型注释。还有问题描述中的类型注解其实是不合法的

您不能使用任何类型的算术运算符(+、- 等...)解构 javascript 对象。

function concatenation(original: string, names?: [string]) {
  return `${original}${names.split("")}`;
}

concatenation("original", ["name1", "name2", "name3"]);