私は '単純に' typescriptでインスタンスを複製しようとしています。typescriptでクラスインスタンスを複製する
jQuery.extend(true, {}, instance)
方法は、任意のヘルプ
をコピーされないため、動作しません大幅にクラスは、デフォルトコンストラクタを持っている場合は、一般的なクローン機能を持たせることができる
私は '単純に' typescriptでインスタンスを複製しようとしています。typescriptでクラスインスタンスを複製する
jQuery.extend(true, {}, instance)
方法は、任意のヘルプ
をコピーされないため、動作しません大幅にクラスは、デフォルトコンストラクタを持っている場合は、一般的なクローン機能を持たせることができる
を高く評価されています
function clone<T>(instance: T): T {
const copy = new (instance.constructor as { new(): T })();
Object.assign(copy, instance);
return copy;
}
例:
class A {
private _num: number;
private _str: string;
get num() {
return this._num;
}
set num(value: number) {
this._num = value;
}
get str() {
return this._str;
}
set str(value: string) {
this._str = value;
}
}
let a = new A();
a.num = 3;
a.str = "string";
let b = clone(a);
console.log(b.num); // 3
console.log(b.str); // "string"
あなたのクラスは(メンバーとして他のクラスのインスタンスを持っている、および/またはデフォルトコンストラクタを持っていない)、より複雑である場合は、構築する方法を知っているあなたのクラスでclone
メソッドを追加し、値を割り当てます。
をお答えいただきありがとうございます。その場合は、コンストラクタを使用しないようにする必要があります。代わりに、私は工場やセッターを使用します。歓声 –
ファイン、次にファクトリ関数とクローン関数をエクスポートしますが、クラス自体はエクスポートしません –
クローンをインスタンス定義してください。誰もJavaのようにあまり普及していない言語であっても、それが実際に意味することに誰も同意しないようです。 –
とにかく、 'Object.create(instance.prototype)'を試してください。 –
@AluanHaddad thxを返信してください。残念ながら、これはTS –