1

私は大きな (2000 行の) javascript ファイルを持っており、それを typescript に変換しようとしていますが、現在直面している煩わしさの中で、次のようなパターンが見られます。

var data = { some_property: some_value, another_property: some_other_value };

そして後で:

$.ajax({

...

complete: function(cfg) {
    var result = JSON.parse(cfg.responseText);
    data.some_property = result.some_property; // This is fine.
    data.some_different_property = result.some_different_property; // error
});

そして、次のようなエラーが表示されます: プロパティ 'some_different_property' は型 '{some_property: ..., another_property: ... }' の値に存在しません。

var data = {...} の行の値から型を推測したのは素晴らしいことですが、このパターンが使用されるたびに、すべての潜在的なプロパティをデータに手書きするのはかなり面倒です。 、そしてそれはコンパイルエラーです。

エラーリストを詰まらせる代わりに、ここにあるデータにも some_different_property があることをコンパイラーに推測させるコンパイラーフラグ/方法はありますか?: (使用法から推測された型)?

4

2 に答える 2

1

いいえ、コンパイラ フラグはありません。ただし、いつでも手動で入力して any にすることができます。

var data:any = { some_property: some_value, another_property: some_other_value };

ここでは、この変数に割り当てているものを無視するようにコンパイラーに指示しています。他のプロパティが存在する可能性があります (潜在的に と呼ばれることもありますsome_propertIE。つまり、これを許可すると、コンパイラーはスペルミスをチェックできません)。

または、宣言/代入を別の行に分割することもできます。この場合、タイプはデフォルトであると推測さanyれます。ただし、これをデフォルトのパターンにすると、実質的に型指定されていないコードになる可能性があります。

var data; // compiler infers it to by any 
data = { some_property: some_value, another_property: some_other_value }; // and you can assign anything
于 2013-10-17T23:34:17.273 に答える
1

オプションのパラメーターを使用してインターフェイスを定義し、変数がそのインターフェイスと一致するように指定できます。

interface my_interface {
  some_property;    // type defaults to 'any'
  another_property: string;
  some_different_property?: number;
}
var data: my_interface = { some_property: 10, another_property: '' };
data.some_different_property = 99;

このインターフェイスを再利用しない場合は、インラインで行うこともできます。

var data2: { prop1; prop2; prop3? } = { prop1: 1, prop2: 2 };
data2.prop3 = "three";
于 2013-10-19T02:55:01.763 に答える