在我的 angular 项目中使用 @types/cleave.js 时如何忽略 TS1192?

How do I ignore TS1192 when using @types/cleave.js in my angular project?

我在 Angular 6 应用程序中使用 cleave.js (^1.5.2) 以及 @types/cleave.js 包 (^1.4.0) 和一个奇怪的东西正在发生。如果我 运行 ng build 构建应用程序失败并出现以下错误:

ERROR in src/app/app.component.ts(4,8): error TS1192: Module '"C:/Users/evcomes/Angular2/hellogular/node_modules/@types/cleave.js/index"' has no default export.
src/app/app.component.ts(5,8): error TS1192: Module '"C:/Users/evcomes/Angular2/hellogular/node_modules/@types/cleave.js/options/index"' has no default export.

我在@types/cleave.js 的源代码中看到确实如此,但它只是一个类型库,为什么我需要默认导出?真正奇怪的部分是,如果我随后(微不足道地)修改一个文件然后保存,自动重建会拾取它(仍然显示错误,但继续),将愉快地为开发中的 angular 应用程序提供服务,并且cleave.js 我使用的功能甚至可以在我的浏览器中使用。那么这不是真正的错误吗?我怎样才能关闭它?

我看到的任何使用 DefinitelyTyped 库的教程或指南都只是说安装它们的 npm 应该足以使用它们而无需任何其他修改,所以我在搜索时发现的大多数问题都是人们在尝试为 JS 库或他们自己的模块创建自己的 TypeScript 绑定。​​

在package.json中:

...
"@types/cleave.js": "^1.4.0",
"cleave.js": "^1.5.2"
...

在我的 tsconfig.json:

...
"esModuleInterop": true,
"typeRoots": [
   "node_modules/@types"
]
...

在我的 app.component.ts:

...
import Cleave from 'cleave.js';
import CleaveOptions from 'cleave.js/options'
...

大多数获取 TS 类型的 js 库都使用 ...* as...。 或者在您的 tsconfig 中要求 allowSyntheticDefaultImports: true 以使默认导出正常工作。

import * as CleaveOptions from 'cleave.js/options'
// AND
import Cleave from 'cleave.js'
//tsconfig.json
...
{
  allowSyntheticDefaultImports: true
}
...