0

なので、よくこんなことをします

save(...keys: string[]) {
    keys.foreach(x => // save);
}

スプレッド演算子により、これをこれらの方法のいずれかで呼び出すことができます。

save('string1', 'string2');
save(['string1', 'string2']);
save('string');

私はこの動作が大好きですが、同じように動作させたいコンポーネントに @input がある場合があります。1 つの項目だけを指定したい場合もあれば、配列を指定したい場合もあります。この構文はどのように適用できますか? このようなことができるようになりたいです。

@Input() ...myClass: ClassBase[] = [];

と、こういう使い方。

// ts
currentClass = new ClassBase();
conflictingClasses = [new ClassBase(), new ClassBase()];

// html
<my-component [myClass]="currentClass"></my-component>
<my-component [myClass]="conflictingClasses"></my-component>

どうすればこの種の動作を取得できますか? すでにこのコンポーネントをいくつかの場所で使用していますが、1 つのアイテムしか与えていません。アイテムの配列を取るようにこのコンポーネントを変更するために一括リファクタリングする必要はありません。

ありがとう!

4

1 に答える 1

2

スプレッド演算子により、これをこれらの方法のいずれかで呼び出すことができます。

いいえ、あなたの質問の前提は間違っています。n 個の文字列引数を指定して呼び出す必要があります。文字列配列string[]は同じではありません。これを以下に示します。

function save(...keys: string[]) {
    keys.forEach(x => /** save */);
}


save('string1', 'string2'); // OKAY
save('string'); // OKAY 
save(['string1', 'string2']); // ERROR !

編集後はあまり注目されない可能性があるため、これを編集する代わりに別の質問としてください。PS: 楽しんで幸せでいよう!

于 2016-09-19T23:03:41.980 に答える