首先,这是我的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"
]
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试导入一个 JavaScript 库:
import Napi from '@org/napi-js';
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:
TS7016:找不到模块“napi-js”的声明文件。'/home/mpen/Projects/my-project/node_modules/@org/napi-js/dist/index.js' 隐式具有 'any' 类型。尝试
npm install @types/org__napi-js它是否存在或添加一个包含`declare module 'org__napi-js'的新声明(.d.ts)文件;
将@types/org__napi-js不存在,所以这是没有好。那么我该如何正确申报呢?
我试过创建一个文件,里面types/org__napi-js.d.ts'只有这个:
declare module 'org__napi-js';
Run Code Online (Sandbox Code Playgroud)
然后我尝试更新我的tsconfig.json以便它可以找到它:
{
"compilerOptions": {
...
"baseUrl": "./",
"paths": {
"*": ["types/*"]
}
},
...
Run Code Online (Sandbox Code Playgroud)
但这没有任何帮助。
我应该做些什么?或者,更明确地说:
any多少才能说明默认导出是?我想,我希望把所有这些存根types/,和我的来源src/,除非有举办TS项目的一些标准方式。
Bry*_*sen 15
创建空声明的另一种方法是 ts-ignore:
// @ts-ignore
import Napi from '@org/napi-js';
Run Code Online (Sandbox Code Playgroud)
mpe*_*pen 11
好的,经过大量的反复试验,结果证明 TypeScript在想要一个名为 的模块上撒谎org__napi-js,而它真正想要的是@org/napi-js.
而且,如果您paths像我一样不熟悉如何工作,TypeScript 会根据模块名称根据需要查找文件,因此路径必须匹配,并且包括@org目录。
所以,我通过更新我的tsconfig.json:
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"*": ["types/*"]
}
},
Run Code Online (Sandbox Code Playgroud)
也就是说在types目录中查找模块。
然后创建模块文件types/@org/napi-js.d.ts. 它所需要的只是:
declare module '@org/napi-js';
Run Code Online (Sandbox Code Playgroud)
请注意它是如何包含@namespace/.
就是这样。您的项目现在应该可以编译了。
| 归档时间: |
|
| 查看次数: |
10157 次 |
| 最近记录: |