导入第三方库时,d.ts声明模块不起作用

时间:2020-03-22 05:27:37

标签: typescript visual-studio-code

在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;
}

enter image description here

但没有导入效果很好

declare module 'someModule' {
    export function test(x: string): string;
}

enter image description here

出什么问题了?

1 个答案:

答案 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?