在d.ts依赖中通过导入导入第三方模块时,有一些Vscode提示“找不到模块”,有什么解决方法吗?
tsconfig.json
{
"compilerOptions": {
"outDir": "./dist/",
"target": "es5",
"lib": ["esnext", "dom.iterable","dom", "scripthost", "es2015.symbol"],
"sourceMap": true,
"noImplicitAny": true,
"jsx": "react",
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"allowJs": true,
"module": "commonjs",
"isolatedModules": false,
"esModuleInterop": true
},
"include": ["src/**/*","typings/*"],
"exclude": ["node_modules"]
}
typings / index.d.ts
import * as moment from 'moment';
declare module 'someModule' {
export function test(x: string): moment.CalendarKey;
}
但没有导入效果很好
declare module 'someModule' {
export function test(x: string): string;
}
出什么问题了?
答案 0 :(得分:0)
您需要将矩点导入放在declare module
下:
declare module 'someModule' {
import * as moment from 'moment';
export function test(x: string): moment.CalendarKey;
}
这是必需的,因为如果文件具有顶级导入或导出(docs),则Typescript具有不同的行为:
在TypeScript中,就像在ECMAScript 2015中一样,任何包含顶级导入或导出的文件都被视为模块。相反,没有任何顶级导入或导出声明的文件将被视为脚本,其内容可在全局范围内使用(因此也可用于模块)。
在顶层添加导入时,它将文件转换为模块,并且声明的作用域仅限于此文件。当您在声明中移动导入时,Typescript将文件视为脚本,并且声明可用于项目中的其他文件。
此外,请参阅与此问题类似的问题:
How to include ambient module declarations inside another ambient module?