global.d.ts 无效问题解决

问题描述

src 同级目录有一个 types目录,其中包含 global.d.ts,如下

js 复制代码
declare global {
  interface Window {
    config: {
      url: string;
    };
  }
}

在组件中访问

js 复制代码
window.config = 'x';

ts显示此错误

js 复制代码
Error:(10, 22) TS2339: Property 'config' does not exist on type 'Window'.

我的tsconfig.json如下

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 导出一个空对象,如下所示:

js 复制代码
declare global {
  interface Window {
    config: {
      url: string;
    };
  }
}

// 添加此语句后,Typescript/CRA可以提取声明文件:
export {}

方法2

如果你的.d.ts文件不导入或导出任何内容,您可以省略该declare global块。

你需要确保此文件位于@types目录中,或者你已配置typeRoots为包含类型声明的目录,例如

js 复制代码
{
  "compilerOptions": {
    "typeRoots": [
      "./node_modules/@types/",
      "./types/"
    ]
  }
}
相关推荐
__松子16 天前
TS项目中如何合理的为接口定义参数类型
前端·javascript·typescript·ts
昔冰_G3 个月前
报红:找不到名称ref ts(2304)、‘ref‘ is not defined. eslint(no-undef)
前端·typescript·vue·vue3·ts·eslint·自动导入
干了这碗小米汤儿4 个月前
ts踩坑!vue3中ts文件用export导出公共方法的ts类型定义
vue3·ts
Java小卷4 个月前
最新vite脚手架配置ts-node工具
ts·vite·ts-node
R-QWERT4 个月前
音视频封装demo:将h264数据和aac数据封装(mux)成TS文件(纯手工,不依赖第三方开源库)
ts·aac·h264·封装·音视频容器
MG5166 个月前
TS 泛型
前端·javascript·typescript·ts
王小c7 个月前
day5 nest商业项目初探·一(java转ts全栈/3R教室)
pnpm·ts·nestjs·3r工作室
Niucode7 个月前
TS改变类型的方法
前端·ts
天外天-亮7 个月前
vue3.0 + ts + eslint报错:error Parsing error: ‘>‘ expected
vue·ts