[解決済み] jsdomとtypescriptで「プロパティ '...' がタイプ 'Global' に存在しない」を防ぐには?
2023-05-13 09:59:38
質問内容
既存のプロジェクトをTypescriptを使用するように変換しようとしていますが、私のテストセットアップではうまくいきません。
私は、テスト用に jsdom をセットアップする設定ファイルを持っており、テスト中に DOM と相互作用するすべてのコードが動作するようにしています。Typescript (ts-node with mocha) を使用すると、常にこのようなエラーが発生します。
Property 'window' does not exist on type 'Global'.
これを防ぐために、NodeJS.Globalのインターフェイスにこのようなパッチを当ててみました。
declare namespace NodeJS{
interface Global {
document: Document;
window: Window;
navigator: Navigator;
}
}
しかし、これでは何も変わりませんでした。
NodeJSグローバル変数でこれらのブラウザプロパティを有効にするにはどうしたらよいでしょうか。
エキストラです。
これは私のモカ
setup.ts
:
import { jsdom, changeURL } from 'jsdom';
const exposedProperties = ['window', 'navigator', 'document'];
global.document = jsdom('');
global.window = global.document.defaultView;
Object.keys(global.document.defaultView).forEach((property) => {
if (typeof global[property] === 'undefined') {
exposedProperties.push(property);
global[property] = global.document.defaultView[property];
}
});
global.navigator = {
userAgent: 'node.js',
};
changeURL(global.window, 'http://example.com/');
どのように解決するのですか?
エラーを回避するためのオリジナル回答
typescriptファイルの先頭に次のように記述します。
const globalAny:any = global;
それなら、代わりにglobalAnyを使えばいい。
globalAny.document = jsdom('');
globalAny.window = global.document.defaultView;
安全性を確保するための回答を更新しました。
型の安全性を確保したい場合は、既存の
NodeJS.Global
の型定義です。
グローバルスコープの中に定義を入れる必要がある
declare global {...}
タイプスクリプトに留意してください
global
スコープは、NodeJSのインターフェースと同じではありません
Global
またはノード
global property
っていう
global
またはタイプ
Global
...
declare global {
namespace NodeJS {
interface Global {
document: Document;
window: Window;
navigator: Navigator;
}
}
}
関連
-
[解決済み】プロパティ 'value' が 'HTMLElement' 型の値に存在しない。
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み】Ignore Typescript Errors "property does not exist on value of type" (タイプの値にプロパティが存在しない)。
-
[解決済み】タイプ 'EventTarget' にプロパティ 'value' が存在しない。
-
[解決済み】TypeScriptのEventTarget型にプロパティ'value'が存在しない。
-
[解決済み] Promiseの型はどのようにアンラップするのですか?
-
[解決済み] types/packageでインストールしたTypeScriptの型定義が正しくない場合に上書きする方法
-
[解決済み] ESLint - TypeScriptの "no-unused-vars "を設定する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Typescript のプリミティブ型:"number" と "Number" の違い(TSC は大文字と小文字を区別しない)?
-
[解決済み] グローバルスコープの拡張は、外部モジュールまたはアンビエントモジュール宣言にのみ直接ネストすることができます(2669)
-
[解決済み] TypeScript "this" scoping issue when called in jquery callback.
-
[解決済み] typescriptでmoment.jsをインポートするには?
-
[解決済み] typescriptのインターフェイスを別ファイルで宣言しインポートする方法
-
[解決済み] tsconfigの "target "と "module "を理解する。
-
[解決済み] Angular2のhttpデータからRxJS ObservablesをTypeScriptで連鎖させる。
-
[解決済み] 2つのインターフェイスを統合する
-
[解決済み] TSにおける文字列列列挙型と文字列リテラル型の相違点
-
[解決済み] vs-codeで複数のtsconfigファイルを使用するには?