在 TypeScript 中扩展 Window 类型
How to extend the Window type in TypeScript
要在 TypeScript 中扩展窗口类型,请创建一个.d.ts
文件,您可以在其中扩展Window
界面,添加您打算在window
对象上访问的属性的名称和类型。TypeScript.d.ts
在查找常规文件的相同位置查找.ts
文件。
在您的src
目录中,创建一个types
包含以下
index.d.ts
文件的目录:
源代码/类型/index.d.ts
export {}; declare global { interface Window { myProperty: string; } }
上面的示例显示了如何使用类型为.nameWindow
的属性扩展接口。myProperty
string
请注意,这在您的用例中会有所不同,因此请务必调整属性名称和类型。
您需要添加要在window
对象上访问的所有属性的名称和类型。
例如,如果您不知道特定属性的类型并希望关闭类型检查,请将其设置为any
.
源代码/类型/index.d.ts
export {}; declare global { interface Window { myProperty: any; } }
现在,我可以设置和访问window
对象的指定属性,而不会出现任何错误。
索引.ts
// ✅ OK window.myProperty = 'hello world'; console.log(window.myProperty);
如果您尝试访问未添加到扩展Window
接口且在原始接口上不存在的属性,则会Window
出现错误:
索引.ts
// ⛔️ Property 'example' does not exist on // type 'Window & typeof globalThis'.ts(2339) window.example = 'hello';
如果您在 IDE 中遇到错误,请尝试将您的types
目录路径添加到您的tsconfig.json
文件中。
tsconfig.json文件
{ "compilerOptions": { // ... rest "typeRoots": ["./node_modules/@types", "./src/types"] } }
我们使用文件中的export {}
行将index.d.ts
其标记为外部模块。模块是至少包含 1 个import
orexport
语句的文件。我们必须这样做才能扩大全球范围。
请注意,您必须根据您的用例更改所提供文件的内容。
index.d.ts
您应该添加您打算在window
对象上访问的所有属性的名称(和类型)。
源代码/类型/index.d.ts
export {}; declare global { interface Window { myProperty: any; } }
提供的文件只是添加一个myProperty
类型为 的属性any
,这很可能不是您需要的。
TypeScript.d.ts
在查找常规文件的相同位置查找
.ts
文件,这由文件中的include
和exclude
设置
决定tsconfig.json
。
TypeScript 会将您声明的Window
接口与原始
Window
接口合并,因此当您使用该window
对象时,您将能够从两个接口访问属性。