当前位置: 首页 > 知识库问答 >
问题:

我应该在哪里放置自定义.d.ts文件?

赵华彩
2023-03-14

我正在尝试为没有它们的包装提供类型:

error TS7016: Could not find a declaration file for module 'inputmask-core'. './node_modules/inputmask-core/lib/index.js' implicitly has an 'any' type.
Try `npm install @types/inputmask-core` if it exists or add a new declaration (.d.ts) file containing `declare module 'inputmask-core';`

我在带有打字稿 2.4.2 的 webpack 中使用 ts-loader,并且在 tsconfig.json 中设置了以下类型根:

"typeRoots": [
  "./node_modules/@types",
  "./src/client/types"
]

我试图模仿中的包结构node_modules/@类型

src/client/types
|--inputmask-core
  |--index.d.ts

< code>index.d.ts中包含以下内容:

declare class InputMask {}
export default InputMask;

但是错误仍然存在。我做错了什么?我应该把那些自定义的. d.ts文件放在哪里?

node_modules/@types和任何其他类型根之间有什么区别?为什么TypeScript会区别对待它们?

共有3个答案

谷梁宁
2023-03-14

有很多包不是打字稿包,所以要修复此错误,只需在 tsconfig 中将 compilerOptions.strict 更改为 false

梁泰
2023-03-14

可能的解决方案:将以下内容放在index.d.ts中,它将会编译:

declare module "inputmask-core" {
    declare class InputMask {}
    export default InputMask;
}

不过,我仍然不理解node_modules/@types得到的特殊处理。

古文康
2023-03-14

使用路径而不是typeRoots

  • https://github.com/Microsoft/TypeScript/issues/22217#issuecomment-369783776
  • https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-映射

“typeRoots”用于全局代码。即在全局命名空间中声明的东西,并且您希望包含它。对于模块,它们有自己的作用域,您所需要的只是路径映射。像这样:

{
    "compilerOptions": {
        "target": "es2017",
        "baseUrl": "./",
        "paths": {
            "*": [ "src/client/@custom_types/*"]
        }
    },
    "exclude": [ "node_modules", "src/client/@custom_types", ... ]
}

注意:路径需要baseUrl,您可能还需要添加要排除的目录。

 类似资料:
  • 问题内容: 我使用netfishs 6.7.1和glassfish v2.1编写了一个Web服务项目,将log4j.properties放入项目的根目录并使用: 在构造函数中: 在功能上: 但是,这是错误信息(实际上,我已经尝试将它几乎可以实现的每个目录都放入): 问题答案: 我知道回答这个问题有点晚了,也许您已经找到了解决方案,但是我将发布我找到的解决方案(在我进行大量Google搜索之后),因

  • 问题内容: 我在ASP.Net中有一个WebAPI 2.0项目,在其中实现了自定义的DefaultContractResolver,以便可以控制如何使用JSON.Net将实体序列化为JSON。但是我不确定如何告诉框架使用我的自定义实现。我也想知道是否有可能更改特定控制器/动作的ContractResolver。 谢谢! -–编辑03/07/2014我已经通过创建一个新的ConfigSettings

  • 很好的一天, 我有一些自定义代码从以前的非mvc应用程序。这都是单元测试之类的。现在,我需要把它放在laravel应用程序中。它们不是控制器、模型或视图?这是否意味着我必须将它们与Symfony和Swiftmailer文件夹一起放入供应商文件夹?

  • 在Vaadin 10-14中,我应该将静态文件放在哪里,例如CSS、JavaScript和聚合模板?静态文件(如图像)如何? 此外,如何在Vaadin中导入这些文件?Vaadin 14与npm和Vaadin 10-13与bower之间有差异吗?

  • 问题内容: 关于组织单元测试,我有两个问题。 我是否必须将测试放在与测试类相同的程序包中,或者可以在不同程序包中组织测试? 例如,如果我具有 有效性 和 其他 测试,即使它们属于同一班级,将它们分成不同的包是否正确? 模拟和存根类呢?我应该将它们与仅包含测试的软件包分开,还是放在一起? 问题答案: 我们执行JUnit测试用例的方法是将它们放在相同的包中,但放在不同的根目录中。由于我们使用Maven

  • 问题内容: 在Vaadin 10-14中,应该将静态文件(例如CSS,JavaScript和Polymer模板)放在哪里?静态文件(例如图像)如何? 另外,如何在Vaadin中导入这些文件?带有npm的Vaadin 14和带有凉亭的Vaadin 10-13之间有区别吗? 问题答案: 所有路径都相对于项目根目录,例如文件在Maven项目中的位置。 使用导入的JavaScript 使用严格模式。除其他