2016-10-26 10 views
0

クラスのインスタンス化(unmarshaller)を処理するコードを作成しています。TypeScript - 人工オブジェクトを特定のクラスに設定する

まず、オブジェクトを作成します。私はlet obj = new BaseModelを使ってそれを行います。
入力データの処理中に、私は最終的にアンマーシャリングされたオブジェクトのクラスを把握します。
私はこのクラスを<T extends BaseModel> clazz : { new(): T }の面で持っています。

これまでに作成したオブジェクトのクラスを、TypeScriptsクラスの処理コードと衝突しないように変更したいと思います。

これは正しい方法ですか?

Object.getPrototypeOf(result).constructor = clazz; 

編集:これはそれではありません。プロパティー値は維持されますが、ブラウザー・コンソールは引き続き使用されるタイプをnewと表示します。

おそらくこれをより将来的に互換性のある方法で行うための構造体がTypeScriptにありますか?

答えて

0

おそらくこれをより将来的に互換性のある方法で行うための構造体がTypeScriptにありますか?

これは正しいです。 JavaScriptの場合と同様に、constructorを使用してTypeScriptの作成関数を決定します。

+0

あなたは、いくつかの例を追加していただけますか? 'MyClass'を既存のオブジェクトのクラスに割り当てたいとします。 –

0

質問を正しく理解している場合は、実行時にnewで作成したタイプから別のタイプ(おそらく派生タイプ)にオブジェクトのタイプを変更する必要があります。

あなたが望むクラスのインスタンスをインスタンス化し、他のオブジェクトのメンバーをそのインスタンスにコピーする方が良いと思います。あなたは、コンストラクタを実行しない場合、あなたはjQueryを使って次の操作を行うことができ

let newTypeObj:NewType = $.extend(true, Object.create(NewType.prototype), oldTypeObj); 

あなたが行うことができますマージする前に、新しいタイプのコンストラクタを実行する場合:

let newTypeObj:NewType = new NewType(); 
$.extend(true, newTypeObj, oldTypeObj); 

jQueryを使用しない場合、または使用しない場合は、古い型のインスタンスを取得し、メンバーをコピーするか、またはバニラJavaScriptを使用してジェネリック拡張を書き込む関数を新しい型で記述できます。

この質問は、代替案についてもう少し持っていますが、一般的なコンセンサスは、あなたがオブジェクトのクラスを変更することはできませんということのようだ:Changing an Object's Type in JavaScript

関連する問題