我在 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/