首先,这是我的tsconfig.json
:
{
"compilerOptions": {
"strict": true,
"importHelpers": false,
"inlineSources": true,
"noEmitOnError": true,
"pretty": true,
"module": "commonjs",
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": false,
"removeComments": true,
"preserveConstEnums": false,
"sourceMap": true,
"lib": ["es2017","esnext.asynciterable"],
"skipLibCheck": true,
"outDir": "dist",
"target": "es2018",
"declaration": true,
"types" : ["node"],
"resolveJsonModule": true,
"esModuleInterop": false
},
"files": [
"src/DatabaseWrapper"
],
"exclude": [
"node_modules"
]
}
现在我尝试导入JavaScript库:
import Napi from '@org/napi-js';
我收到此错误:
TS7016:找不到模块“ napi-js”的声明文件。 “ /home/mpen/Projects/my-project/node_modules/@org/napi-js/dist/index.js”隐式具有“ any”类型。 尝试
npm install @types/org__napi-js
(如果存在)或添加一个包含声明模块'org__napi-js'的新声明(.d.ts)文件;
@types/org__napi-js
不存在,所以不好。那么如何正确声明呢?
我尝试创建一个文件types/org__napi-js.d.ts'
,其中仅包含以下内容:
declare module 'org__napi-js';
然后我尝试更新我的tsconfig.json
,以便可以找到它:
{
"compilerOptions": {
...
"baseUrl": "./",
"paths": {
"*": ["types/*"]
}
},
...
但这没有任何帮助。
我该怎么办?或者,更明确地:
any
的最少代码量是多少?除非有某种标准的方式来组织TS项目,否则我想将所有这些存根都放在types/
中,而我的消息源都放在src/
中。
答案 0 :(得分:4)
好的,因此,通过大量的反复试验,事实证明TypeScript是在撒谎关于想要一个名为org__napi-js
的模块,而真的想要的是@org/napi-js
。
而且,如果您不熟悉paths
的工作方式,TypeScript会根据模块名称根据需要查找文件,因此路径必须匹配,并且其中包含@org
目录。
因此,通过更新tsconfig.json
使我走上了正轨:
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"*": ["types/*"]
}
},
也就是说,在types
目录中查找模块。
然后创建模块文件types/@org/napi-js.d.ts
。它只需要:
declare module '@org/napi-js';
请注意 如何包含@namespace/
。
就是这样。您的项目应立即编译。
答案 1 :(得分:0)
创建空声明的另一种方法是ts-ignore:
// @ts-ignore
import Napi from '@org/napi-js';