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

标签 javascript angular typescript definitelytyped cleave

我在 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 绑定(bind)。​​

在 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
}
...

关于javascript - 在我的 Angular 项目中使用 @types/cleave.js 时如何忽略 TS1192?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066151/

相关文章:

javascript - 使用 Prototype 遍历 javascript 中对象的每个属性?

angular - 如何绑定(bind)到另一个指令中的指令输入?

typescript - Array.isArray 检查不足以让编译器完全了解 TypeScript 中可能的数组值

node.js - 卡在 npm install at fechMetadata 检查可安装状态

typescript - 如何让接口(interface)中的属性类型相互依赖?

typescript 类型守卫和粗箭头功能

javascript - Expo FileSystem.moveAsync 位置不可移动?

javascript - Chart.js 两个 Y 轴,一个为负值

javascript - iframe加载无限 Angular 2

angular - oidc-client 与 IdentityServer3 - Angular2 SPA,如何刷新数据访问 token