[解決済み] Typescript、"Object is possibly null" エラーをどのように渡すか?
2023-08-10 04:31:40
質問
Object is possibly null"というエラーが何度も出て、通常はnullを返す場合に備えて安全な"if文"を使用しています。
次のような関数があります。
const ModalOverlay = (props: any[]) => {
const overlayEl = useRef(null);
useEffect(() => {
overlayEl.current.focus();
});
return <div {...props} ref={overlayEl} />;
}
しかし
overlayEl.current
は、エラー "オブジェクトが定義されていません" を取得します。そこで、試してみました。
if (!overlayEl) {
return null
} else {
useEffect(() => {
overlayEl.current.focus();
});
return <div {...props} ref={overlayEl} />;
}
これはうまくいきませんでした。私も試しました。
overlay && overlayEl.current.focus();
何かヒントがあれば、非常に感謝します。ありがとうございます。
どのように解決するのですか?
const overlayEl = useRef(null)と宣言した場合。 と宣言すると、それがその多くの情報で提供できる最良の推論であるため、その型が null となります。
試しに....
const overlayEl = useRef<HTMLDivElement>(null);
また、未定義であることを気にしないのであれば、以下のような構文もあります。
const overlayEl = useRef(document.createElement("div"))
上記の構文を使用すると、すべての一般的な DOM メソッドは "0" などのデフォルトを返すだけです。
使用法。
if(overlayEl.current) {
// will be type HTMLDivElement NOT HTMLDivElement | null
const whattype = overlayEl.current;
}
この仕組みは、typescript の静的解析が賢いので
if
が NULL に対してガードしていることを理解します。
null | HTMLDivElement
の結合からそれを取り除きます。
関連
-
[解決済み] TypeScript getting error TS2304: cannot find name ' require'.
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] JSONオブジェクトをTypeScriptのクラスにキャストする方法を教えてください。
-
[解決済み] TypeScriptのオブジェクトリテラルでの型定義
-
[解決済み】「エラー TS2533: オブジェクトは 'null' または 'undefined' の可能性があります」を抑制する方法とは?
-
[解決済み] 型 'X' の引数は型 'X' のパラメータに代入できません。
-
[解決済み] 新しい Typescript 1.8.4 のビルドエラー。" ビルド。Property 'result' がタイプ 'EventTarget' に存在しません。"
-
Angular 2:ObservableをPromiseに変換する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] モジュールと名前空間 - Import vs Require Typescript
-
[解決済み] Visual Studio コード自動インポート
-
[解決済み] Typescript で Enum を制限付きキータイプとして使用する
-
[解決済み] spec/testフォルダを使用したtsconfigのセットアップ
-
[解決済み] タイプスクリプトでenumをインデックスキーとして使用するには?
-
[解決済み] TypeScriptで純粋な抽象クラスを拡張する場合と実装する場合
-
[解決済み] プライベートセッターのタイプスクリプト?
-
[解決済み] Angular2でのenumに基づく選択
-
[解決済み] jsdomとtypescriptで「プロパティ '...' がタイプ 'Global' に存在しない」を防ぐには?
-
String Prototypeを拡張し、Typescriptで使用するには?