NGRXレデューサーに何らかの初期値を指定した場合にのみ定義されます。もしあなたがそれをしていなければ、未定義になる可能性があります。
あなたは配列を扱っている場合は、[]
にあなたの初期値を設定したい:あなたはどこかに何かを定義していない場合
const initialState = [];
export function myReducer(state = initialState, action: Action)
....
活字体コンパイラが正しいかは、あなたが潜在的に未定義の値を持つことができます。
EDIT
は、私はあなたがコンパイラが正確にnull値を検出していないことに、右だと思います。私はstrictNullChecks
をオンにし、次のことを行うと、それが正常に動作します:私はfilter
を削除する場合は実際には、それはまだ、エラーなしでコンパイル
arr: Person[] = [];
ngOnInit() {
this.arr
.filter(x => !!x && !!x.firstName)
.map(x => console.log(x.firstName));
}
。私はthis.arr.push(<Person>{lastName: 'test'});
を追加しても、オブジェクトにfirstName
を決して定義していないにもかかわらずエラーなしでコンパイルされるため、未定義になります。
私はarr
の署名を削除した場合、私はx.firstName
が定義されていないというコンパイルエラーを取得:
arr = [];
ngOnInit() {
this.arr
.filter(x => !!x && !!x.firstName)
.map(x => console.log(x.firstName));
}
strictNullChecks
チェックしてだから、活字体コンパイラフィールドは、オブジェクトのインターフェイス上に存在し、必ずしも必要ではないが、彼らかどうかが定義される。
返信いただきありがとうございます!しかし、確かにそれは、フィルタ –
のためにエラーが報告されているところでは、 'map(value => value.prop)'には決して行きません。また、ngrxストアで文字列セレクタを使用していることによっても影響を受ける可能性があります。代わりに、 'this.store.select(s => s.state)'を使用してインターフェイスのハードコーディングを試してください。この方法では、コンパイラは ''のキャストではなく、ストアのデータ型を正しく推測します。 –
残念ながら... –