Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用附加属性创建数组_Javascript_Arrays_Typescript - Fatal编程技术网

Javascript 使用附加属性创建数组

Javascript 使用附加属性创建数组,javascript,arrays,typescript,Javascript,Arrays,Typescript,我使用的是一个现有的第三方API,对此我没有控制权,需要我传递一个带有附加属性的数组。如下所示: type SomeArgument = string[] & { foo: string }; doSomething (argument: SomeArgument); 现在,我发现创建SomeArgument,同时让编译器满意,这是非常笨拙和冗长的 这一个可行,但根本没有类型安全: const customArray: any = ['baz']; customArray.foo =

我使用的是一个现有的第三方API,对此我没有控制权,需要我传递一个带有附加属性的数组。如下所示:

type SomeArgument = string[] & { foo: string };
doSomething (argument: SomeArgument);
现在,我发现创建
SomeArgument
,同时让编译器满意,这是非常笨拙和冗长的

这一个可行,但根本没有类型安全:

const customArray: any = ['baz'];
customArray.foo = 'bar';
doSomething(customArray);
另一个感觉更干净但非常详细的选项(我需要具有不同属性的不同子类)是将
数组子类化:

class SomeArgumentImpl extends Array<string> {
  constructor (public foo: string, content?: Array<string>) {
    super(...content);
  }
}
doSomething(new SomeArgumentImpl('bar', ['baz']));
class SomeArgumentImpl扩展了数组{
构造函数(公共foo:string,content?:数组){
超级(…内容);
}
}
doSomething(newsomeargumentimpl('bar',['baz'));

有没有更好的,一行式的方式?我希望在
doSomething({…['baz'],foo'bar'})中有一些东西(这一个显然不起作用)。

假设这是您要调用的函数:

function doSomething (argument: string[] & { foo: string }) {
   argument.push("a");
   argument.foo = "4";
   console.log(argument);
}
然后你可以这样称呼它:

// Works
doSomething(Object.assign(["a", "b"], { foo: "c" }));
// Error
doSomething(Object.assign(["a", 2], { foo: "c" }));
// Error
doSomething(Object.assign(["a", 2], { foo: 4 }));

不完全是我想要的:
doSomething
实际上是一个我无法控制的第三方库函数。我只需要提供一个
string[]&{foo:string}
类型的参数,我希望尽可能简单地创建它。无论如何谢谢你!哦,我还以为你在用自己的函数包装库函数呢。我现在看到问题了:)--更新了我的答案。啊,我没有想到
Object.assign
的想法。完美的