问题描述
和 src
同级目录有一个 types
目录,其中包含 global.d.ts
,如下
declare global {interface Window {config: {url: string;};}
}
在组件中访问
window.config = 'x';
ts
显示此错误
Error:(10, 22) TS2339: Property 'config' does not exist on type 'Window'.
我的tsconfig.json
如下
{"compilerOptions": {"target": "esnext","useDefineForClassFields": true,"module": "esnext","moduleResolution": "node","strict": true,"jsx": "preserve","jsxImportSource": "vue","sourceMap": true,"resolveJsonModule": true,"esModuleInterop": true,"lib": ["esnext", "dom"],"baseUrl": "./","allowJs": true,"forceConsistentCasingInFileNames": true,"allowSyntheticDefaultImports": true,"strictFunctionTypes": false,"noUnusedLocals": true,"noUnusedParameters": true,"experimentalDecorators": true,"noImplicitAny": false,"skipLibCheck": true,"paths": {"@/*": ["src/*"]},"types": ["vite/client"]},"include": ["src", "types/**/*.d.ts"],"exclude": ["dist", "node_modules"]
}
问题解决
方法1
一种简单的方法是从你的 global.d.ts
导出一个空对象,如下所示:
declare global {interface Window {config: {url: string;};}
}// 添加此语句后,Typescript/CRA可以提取声明文件:
export {}
方法2
如果你的.d.ts
文件不导入或导出任何内容,您可以省略该declare global
块。
你需要确保此文件位于@types
目录中,或者你已配置typeRoots
为包含类型声明的目录,例如
{"compilerOptions": {"typeRoots": ["./node_modules/@types/","./types/"]}
}