未使用import时TypeScript无法识别axios的问题求助
我目前的tsconfig.json配置如下:
{ "compilerOptions": { "noEmitOnError": true, "noImplicitAny": false, "removeComments": false, "sourceMap": true, "target": "es6", "moduleResolution": "node", "module": "ES6", //"strict": true, "types": [ "node", "bootstrap", "jquery", "axios"], "esModuleInterop": true, "typeRoots": [ "./node_modules/@types", // Default path to search typings. "./lib/types" // Directory of typings that located by Libman. ] }, "include": [ "../wwwroot/assets/js/*.ts" ], "exclude": [ "node_modules" ] }
我已经执行了以下安装命令,并且把axios加入到了tsconfig.json的types数组中:
npm i axios --global npm install --save-dev @types/axios
查看node_modules/@types/axios目录时,发现里面没有/dist文件夹。之后我在TypeScript文件里直接使用axios(不想写import语句),编译时却碰到了这个错误:
error TS2304: Build:Cannot find name 'axios'.
有没有大佬知道怎么解决这个问题?我就是不想在每个TS文件里都写import。
解决方案建议
你可以试试下面这几个步骤,应该能解决全局使用axios时TypeScript识别的问题:
先把axios安装到项目本地:全局安装的包可能没法被你的项目正确识别,先卸载全局的axios,再安装到项目依赖里:
npm uninstall -g axios npm install axios --save把axios挂载到全局window对象:找一个项目的入口TS文件(或者单独写一个初始化文件),添加这段代码,让axios成为全局变量:
// 用CommonJS方式 window.axios = require('axios'); // 或者用ES模块方式 import axios from 'axios'; (window as any).axios = axios;让TypeScript识别全局axios的类型:你可以在项目里创建一个全局类型声明文件,比如
global.d.ts,把它放到lib/types目录下(因为你的tsconfig.json里typeRoots包含了这个路径),文件内容如下:declare global { interface Window { axios: typeof import('axios'); } } export {};这样TypeScript就知道window上有axios这个全局变量,并且能正确识别它的类型了。
确保声明文件被包含:检查你的
tsconfig.json的include配置,确保这个global.d.ts所在的目录被包含进去,如果放在../wwwroot/assets/js/下的话,现在的include配置已经覆盖这个路径了,就不用额外修改。
做完这些步骤后,你应该就能在TS文件里直接用axios,不用写import也不会报错啦。
备注:内容来源于stack exchange,提问作者VAAA

