2017-12-05 13 views
0

をflowtypeとフロータイプは、それらをチェックします:型チェックダイナミックプロパティは、私は、オブジェクトにダイナミックプロパティを追加しようとしています

私の機能は次のようになります:

function defineStuff(obj:MyType, keys:string[]):??? { 
    keys.forEach(function(key) { 
     Object.defineProperty(obj, key, {get:function(){....}}); 
     obj["Add"+key] = function(value) {....}; 
     obj["Remove"+key] = function(value) {....}; 
    } 
    return obj; 
} 

私のことができるようにしたいと思いますこのようなことをする。

var obj : MyType = fetchMyObj(); 
defineStuff(obj, ["Thing", "OtherThing"]); 
var thing = obj.Thing; 
obj.AddOtherThing(10); 

すべての動的プロパティの種類は数

だろう流れでこれを行うための構文はありますか? (つまり、???を記入する方法)

答えて

0

これは辞書には有効です。

type MyType = {[key: string]: number}; 

// ... 
function defineStuff(obj: MyType, keys:string[]): MyType { 
    keys.forEach(function(key) { 
     Object.defineProperty(obj, key, {get:function(){....}}); 

     // you can't have functions here, because you say that all values should be numbers 
     // obj["Add"+key] = function(value) {....}; 
     // obj["Remove"+key] = function(value) {....}; 
    } 
    return obj; 
} 

// ... 

See docs

+0

残念なことに、がMyTypeはない:辞書が、他のものを持っている{[ストリング] nuimber}。追加されたプロパティのみが数値(および対応する関数)になります。 私は最終的に、完全な型の外層を持っていたので、定義の型チェックをあきらめました(各コンポーネントがミックスインすると宣言したものの交差型として定義されています) –

+0

@MR、私はあなたに誤解されたようです、 ごめんなさい。とにかく、「外側のレイヤー」の導入についてあなたが言っていることは、あなたがFlowTypeによって強制的に懸念の分離を行うようになったように見えますが、結局それは良いことです。 –

関連する問題