首页 文章

如何在子目录中添加模块的类型定义?

提问于
浏览
0

我试图使用nock模拟使用axios发出的请求 . 这种集成在历史上存在一些问题,但是in this issue描述的解决方法有效 . 当我将Typescript引入混合时,我的问题出现了 . 虽然 axios 附带了主库的类型定义文件,但 nockaxios 集成需要从子目录导入,如下所示:

import HttpAdapter from 'axios/lib/adapters/http';

Typescript编译器抱怨此行有以下错误:

TS7016: Could not find a declaration file for module 'axios/lib/adapters/http'. 'C:/Users/<user>/<project>/node_modules/axios/lib/adapters/http.js' implicitly has an 'any' type.
  Try `npm install @types/axios` if it exists or add a new declaration (.d.ts) file containing `declare module 'axios';`

我该如何解决这个错误?我尝试了 axios 的各种自定义类型定义组合:

// <project>/src/types/axios.d.ts

declare module 'axios/lib/adapters/http` {
    import { Adapter } from 'axios';

    const HttpAdapter: Adapter;

    export default HttpAdapter;
}

我对Typescript不太熟悉,所以我的理论是我的自定义定义文件位置错误,使用了错误的模块名称,或者没有导出正确的东西 . 任何帮助将不胜感激 .


附加上下文

Typescript Version: 2.9.2

tsconfig.json 的(相关)内容:

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "module": "esnext",
    "target": "es5",
    "lib": ["es2015", "es2017", "dom"],
    "moduleResolution": "node",
    "rootDir": "src",
    "noImplicitAny": true,
    "typeRoots": ["./src/types", "./node_modules/@types"]
  }
}

1 回答

  • 1

    添加files / include下的types目录,就像其余的TS文件一样 . 假设所有源文件都在 src 中,这应该有效:

    {
      "compilerOptions": {
        "allowSyntheticDefaultImports": true,
        "module": "esnext",
        "target": "es5",
        "lib": ["es2015", "es2017", "dom"],
        "moduleResolution": "node",
        "rootDir": "src",
        "noImplicitAny": true
    
        // This is automatically done by "moduleResolution": "node"
        // "typeRoots": ["./node_modules/@types"]
      },
    
      // Also make sure to add any other directories as needed
      "include": ["src/**/*"]
    }
    

相关问题