2016-11-10 2 views
1

私はTypescriptでクラスを持っています。それは私がすべてのオブジェクトのフィールドを介して、私はいくつかの変更を実行する必要があるタイプnumberのフィールドにループにしようとした別のクラスのいくつかの機能にはいくつかのフィールドTypescriptでフィールドタイプを取得

field1 : ko.observable<number>(); 
field2 : ko.observable<string>(''); 
... 

を持っています。

これはどのように検出できますか?


私は次に試しましたが、論理的にはstringとタイプされています。 locationModelはあなたの問題は、フォームからの入力値が常に文字列になるだろうということです、あなたがそれらのタイプにするために、適切な値を解析する必要が入力はタイプtext

Object.keys(locationModel) 
.forEach(property => { 
       if (typeof locationModel[property]() === 'number') { } 
       else{ } 
      } 
     }); 

答えて

1

自動タイプ変換をノックアウトにしたい場合は、エクステンダを作成することができます。

  • 書き込み格納に観察可能で変換された値を受信した値を変換し、または
  • ストアで受信した値:最も基本的な形態において

    それはどちらか、そのwritable computedを返すことができ観察可能なまま変わらずにに変換します。

後者の実装はこれを好きでした - 以下のスニペットを実行し、タイプはのviewmodelに反映されるしくみに注意してください:

ko.extenders.type = function (target, type) { 
 
    var typedValue = ko.pureComputed({ 
 
     read: function() { 
 
      var value = target(); 
 
      if (typeof value === "undefined" || value === null) { 
 
       return value; 
 
      } else { 
 
       return type(value); 
 
      } 
 
     }, 
 
     write: target 
 
    }); 
 
    typedValue.raw = target; 
 
    return typedValue; 
 
}; 
 

 
var vm = { 
 
    num: ko.observable().extend({type: Number}), 
 
    str: ko.observable().extend({type: String}) 
 
}; 
 

 
ko.applyBindings(vm); 
 

 
// init some values 
 
vm.num(100); 
 
vm.str(100);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
Num: <input data-bind="value: num"> (raw: <span data-bind="text: num.raw"></span>)<br> 
 
Str: <input data-bind="value: str"> (raw: <span data-bind="text: str.raw"></span>)<br><br> 
 

 
<hr> 
 
View Model:<br> 
 
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

0

であるHTMLフォームからの値で を満たしましたあなたがしたいこと。

したがって、モデル内のすべての入力文字列を適切な値に変換できるマッピングを手動で設定する必要があります。

+1

私は同意します。とにかくオブザーバブルを特定のタイプに強制することができるかどうかはわかりませんが、これはどのように動作するのでしょうか。しかし、完全に[extenders](http://knockoutjs.com/documentation/extenders.html)を使ってノックアウト値を自動的に変換することは可能です。 – Tomalak

+0

@Tomalakタイプスクリプトの観点から見ると、オブザーバブルタイプを特定のタイプにタイプすると、TSのタイピングのほとんどのように、実行時にそれらの制約がすべて失われても、コンパイル時にはすべてokです。 – Alex

+0

正確に。 OPは、誤ってTypeScriptに実行時の型変換が関係すると思われますか? – Tomalak

関連する問題