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

问题描述 投票:0回答:3

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

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

但是,问题是,关于

name
的参数还可以多一些;因此,这不是一个好的编码风格。我想改变它,如下所示。

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

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

javascript typescript destructuring
3个回答
4
投票

您可以将休息与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'));


2
投票

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

事实上,你的函数

concatenation
实际上所做的只是连接多个字符串变量,尽管你试图通过名称来区分它们。由于您想将变量放置在函数的参数中,因此您可以简单地使用 解构赋值

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

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

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


1
投票

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

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

concatenation("original", ["name1", "name2", "name3"]);
© www.soinside.com 2019 - 2024. All rights reserved.