如何允许缺少.d.ts类型定义的模块?

时间:2019-01-13 22:33:15

标签: typescript import

我正在使用一些不受欢迎的模块,例如Dyojs-sha3,它们似乎没有任何类型。

我现在真的不在乎第三方库中的类型,我不想花很多时间来键入这些类型。我主要在服务器上使用它,以限制我的错误并使开发过程中的故障排除更加容易。

之前我有一个Cannot find module X错误,所以我在tsconfig.json文件中添加了"moduleResolution": "node"

如何使打字稿不抱怨节点模块缺少类型?

整个错误:

Could not find a declaration file for module 'dyo'. '/node_modules/dyo/dist/dyo.umd.js' implicitly has an 'any' type.
  Try `npm install @types/dyo` if it exists or add a new declaration (.d.ts) file containing `declare module 'dyo';` [7016]

我在网络中某个暗处的评论中发现了// @ts-nocheck,但似乎不起作用。

我可以通过模块将其关闭吗?

2 个答案:

答案 0 :(得分:2)

对于不想创建自己的 .d.ts 定义文件的人,您可以在 "noImplicitAny": false 中使用 tsconfig.json 以允许使用没有 TypeScript 定义文件的外部库。

示例:

{
  "compileOnSave": false,
  "compilerOptions": {
     ...
    "noImplicitAny": false,
     ...
    }
  }
}

这允许 TypeScript 从每个缺失的类型推断 any 类型,因此这也会影响您自己的项目。

答案 1 :(得分:0)

您可以创建虚拟的.d.ts定义,该定义允许从模块中导入任何内容-导入它会导致dyo具有any类型的内容(确切的导入方式取决于esModuleInterop编译器设置,以及如何从dyo.umd.js导出内容。

  1. 在项目中的某个位置创建一行文件dyo.d.ts

    declare module 'dyo';
    
  2. 在引用该模块的文件中,在此行的顶部添加dyo.d.ts文件的适当路径:

    /// <reference path='./dyo.d.ts' />
    

2的替代方法是将dyo.d.ts添加到tsconfig.json文件的编译中包含的文件的列表中:

"files": [
    ... other files as necessary ...

    "./path/to/dyo.d.ts"
]