汚れチェックやゲッタとセッタの生成を使わずにTypescriptでデータバインディングを行う方法を考えています。私は、静的解析を使用して特定のクラスの特定のフィールドが割り当てられているすべての場所を見つけることが可能かどうかを判断しようとしています(タイプ注釈の完全使用を前提としています)。その目的は、ゲット/セッター(私が思い出したように)がプロパティの割り当てよりもVMを最適化するのが難しいため、インスペクション時にインスタンスからの乱雑さを除去し、ランタイムでより良いものになるシーンの裏側のデータバインディングを処理する関数への呼び出しを生成することです。例えば静的解析を使用して、特定のフィールドへのすべての割り当てを検索します。
export class Vector3 {
public x : number;
public y : number;
public z : number;
}
var v0 = new Vector3();
v0.x = 1;
//generate call to Databindings.set(v0, 'x', v0.x);
function addX(a : Vector3, val : number) : void {
a.x += val;
//generate call to Databindings.set(a, 'x', a.x);
}
addX(a, 10);
私は私がするVector3のx
プロパティのインスタンスへのすべての割り当てを見つける方法を把握することができますことはほぼ確実だが、関数の内部、それはどのように動作するかわからないが、addX
インスタンス変数のように呼び出しますエイリアスされます。
私はこの問題にどのようにアプローチできますか?私のプログラムには既にASTがあるとします。
感謝を使用することができますが、私はゲッター/セッターの発生を回避しようとしています。可能であればビルド時にこれを理解したいと思っています – weichsem
ビルド時に設定値を取得できません。どのようなASTをお持ちですか? typescript AST APIを使用してポストプロセッサを書き込むことができます。一般的に、あなたはオブジェクトのクラスを持っていません。 'let arr:IXProp [] = [{x:0}、new Vector3()]; for(arrのキー)key.x = 5; ' – madreason