打字稿找不到声明文件

时间:2021-03-22 13:46:02

标签: reactjs typescript types

我不知道为什么,但打字稿找不到我的声明文件,即使我有一个。谁能看出这是为什么?

我的项目结构:

scr
  - main.ts
  - dec.d.ts

str-utils
  - index.js

导入:

import {strReverse, strToLower} from '../str-utils/index.js' 

我的声明文件(dec.d.ts):

declare module "str-utils"

我的打字稿配置:

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "sourceMap": false,
    "outDir": "dist"
  },
  "include": [
    "src/**/*",
    "src/dec.d.ts"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}

谁能看到我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

declare module "{name}" 名称的一般规则是它应该与您用于导入模块的名称相同。所以,在这种情况下,declare module '../str-utils/index.js'。但这不起作用,因为 declare module "{name}" 不适用于相对路径。您有两种方法可以解决此问题:

1.使导入变得非相关:

您修改 tsconfig 以使 str-utils 在没有相对导入的情况下可用。

{
  "compilerOptions": {
    // other options
    "paths": {
      "string-utils": ["./str-utils/index.js"]
    },
  },
  // other options
}

现在您可以通过 str-utils 导入 import {strReverse, strToLower} from 'str-utils',因此您的模块声明有效。

2.将声明文件移动到 str-utils 文件夹

首先,您需要从声明文件中删除 declare module "str-utils"。它应该看起来像这样:

// no wrapping declare module "name" anymore
export function strReverse(arg: string): string;

export function strToLower(arg: string): string;

然后您需要重命名声明文件名以匹配您要扩充的模块的文件名。在这个例子中,我们想要增加 index.js,所以类型声明的文件名应该是 index.d.ts。对于这种方法,您的文件夹结构应如下所示:

src
  - main.ts
  
str-utils
  - index.d.ts
  - index.js