运行相关的yarn add
命令之后,以下是packages.json
中的新行:
"@types/classnames": "^2.2.7",
"classnames": "^2.2.6",
然后我将这些行添加到我的打字稿文件中:
import * as classnames from 'classnames';
...
<div className={classnames('normal', 'on')}>
现在我收到此错误
类型错误:无法调用类型缺少调用签名的表达式。输入'{默认值:ClassNamesExport; }'不兼容 呼叫签名。 TS2349
我的tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"experimentalDecorators": true
},
"include": [
"src"
]
}
如何解决此错误?
答案 0 :(得分:1)
尝试按以下方式进行操作
import classnames from 'classnames'
;
或
import {default as classnames} as 'classnames'
;
如果它们都不起作用,请检查您要使用的模块的package.json是否具有“ main”或“ module”字段。如果没有,那也许可以解释该错误。
答案 1 :(得分:1)
执行import * as X from 'x'
时,您将获得一个模块名称空间对象。这是一个不可变的对象,不能调用。
由于classnames
是commonjs模块,因此您需要在esModuleInterop: true
中设置tsconfig.json
并执行import classnames from 'classnames'
,
,或者您可以使用旧的语法import classnames = require('classnames')
导入它。
建议使用esModuleInterop
。