[解決済み】「TS2532: Object is possibly 'undefined'」というエラーを解決するにはどうしたらいいですか?
2022-02-10 17:44:32
質問
Firebase Cloud Functions と Firestore を使用する Web アプリのサンプルを再構築しようとしています。関数をデプロイすると、次のエラーが発生します。
src/index.ts:45:18 - error TS2532: Object is possibly 'undefined'.
45 const data = change.after.data();
これがその機能です。
export const archiveChat = functions.firestore
.document("chats/{chatId}")
.onUpdate(change => {
const data = change.after.data();
const maxLen = 100;
const msgLen = data.messages.length;
const charLen = JSON.stringify(data).length;
const batch = db.batch();
if (charLen >= 10000 || msgLen >= maxLen) {
// Always delete at least 1 message
const deleteCount = msgLen - maxLen <= 0 ? 1 : msgLen - maxLen
data.messages.splice(0, deleteCount);
const ref = db.collection("chats").doc(change.after.id);
batch.set(ref, data, { merge: true });
return batch.commit();
} else {
return null;
}
});
関数をデプロイしてテストしようとしているところです。そして、すでに同様の問題をウェブで検索しましたが、私の問題に一致する他の投稿を見つけることができませんでした。
解決方法を教えてください。
TypeScript 3.7のリリースで、オプションのチェーニング(
?
演算子) が正式に利用可能になりました。
そのため、式を次のように簡略化することができます。
const data = change?.after?.data();
詳しくは、そのバージョンの リリースノート そのバージョンでリリースされた他の興味深い機能をカバーしています。
以下を実行して、TypeScriptの最新の安定版リリースをインストールします。
npm install typescript
とはいうものの
オプショナル・チェイニング
と一緒に使用することができます。
Nullish Coalescing
を処理する際のフォールバック値として使用します。
null
または
undefined
値
const data = change?.after?.data() ?? someOtherData();
追加ポイント
条件付きでオプショナル・チェイニングを使用する場合
if
ステートメントを使用する場合でも、適切な値/型の等質性チェックを行う必要があります。
厳密なTypeScriptでは、以下のようにすると失敗する。未定義の値と数値を比較している可能性があるからだ。
if (_?.childs?.length > 0)
そのかわり、こうすればいいのです。
if (_?.childs && _.childs.length > 0)
関連
-
[解決済み】tsconfigファイルにおけるesModuleInteropの理解
-
[解決済み] Jest で typescript を使用して identity-obj-proxy を使用すると未定義が返される
-
[解決済み] TypeScriptの円形型参照
-
[解決済み] TSLintの "文字列リテラルによるオブジェクトアクセス "を回避するためのコードの書き換え方法
-
[解決済み] オブジェクトの型は「不明」です typescript generics
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] String型とstring型の違いは何ですか?
-
[解決済み】TypeScriptの "not assignable to parameter of type never "エラーとは?
-
[解決済み】「エラー TS2533: オブジェクトは 'null' または 'undefined' の可能性があります」を抑制する方法とは?
-
[解決済み】文字列の値を持つenumの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 型{ [key: string]: boolean; }は何を意味するのでしょうか?
-
[解決済み] 未使用のパラメータに対する型チェックをスキップする
-
[解決済み] TypeScriptで、「extends keyof」と「in keyof」はどういう意味ですか?
-
[解決済み] Jestで関数をモックする方法
-
[解決済み] フォーインステートメント
-
[解決済み] 'タイプ 'never'にプロパティが存在しません。
-
[解決済み] Typescriptでオブジェクトのプロパティを結合する方法は?
-
[解決済み] TypeScriptの "*.d.ts "について
-
[解決済み] TypeScriptのクラス型チェック
-
[解決済み】TypeScriptのインターフェースと型について