use*_*012 15 typescript visual-studio-code
在 d.ts 中通过 import 声明模块依赖第三方模块时,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"]
}
Run Code Online (Sandbox Code Playgroud)
打字/index.d.ts
{
"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"]
}
Run Code Online (Sandbox Code Playgroud)
但无需导入即可正常工作
import * as moment from 'moment';
declare module 'someModule' {
export function test(x: string): moment.CalendarKey;
}
Run Code Online (Sandbox Code Playgroud)
什么问题?
jus*_*ris 25
您需要将时刻导入放在以下位置declare module:
declare module 'someModule' {
import * as moment from 'moment';
export function test(x: string): moment.CalendarKey;
}
Run Code Online (Sandbox Code Playgroud)
这是必需的,因为如果文件具有顶级导入或导出(docs),Typescript 会有不同的行为:
在 TypeScript 中,就像在 ECMAScript 2015 中一样,任何包含顶级导入或导出的文件都被视为模块。相反,没有任何顶级导入或导出声明的文件被视为其内容在全局范围内可用的脚本(因此也适用于模块)。
当您在顶层添加导入时,它会将您的文件转换为模块,并且声明的范围仅限于该文件。当您将导入移至声明内时,Typescript 会将该文件视为脚本,并且声明可用于项目中的其他文件。
另外,请参阅具有类似问题的此问题:
| 归档时间: |
|
| 查看次数: |
18082 次 |
| 最近记录: |