Quo*_*ang 4 import node.js typescript loopbackjs
我是 TypeScript 的新手。我目前正在学习使用 Typescript 语言的 NodeJS Loopback 4框架。我的问题是如何将在 JS 文件中导出的一些函数、类导入到我的 TS 文件中。经过多种方式搜索后,它仍然对我不起作用。下面是例子:
// /src/index.ts
import {plus} from './lib/test';
console.log(plus(1,2));
Run Code Online (Sandbox Code Playgroud)
// /src/lib/test.js
export function plus(x, y) {
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用这样的定义打字稿
// /src/lib/test.d.ts
export declare function plus(x: number, y: number): number;
Run Code Online (Sandbox Code Playgroud)
但是在 index.ts 文件中导入这个函数时仍然出错
错误:在 Function.Module._resolveFilename (module.js:543:15) 中找不到模块“./lib/test”
看起来 tsconfig.json 没有启用“allowJs”,因为它导出声明。
您是否有理由不希望这是一个打字稿文件?如果您将 test.js 更改为 test.ts,通过将其设为 .ts 应该允许它在您的索引文件中被识别。
好吧,@maaz-syed-adeeb 提到的那么简单的解决方案将起作用:
import { path } from './lib/test.js'
Run Code Online (Sandbox Code Playgroud)
扩展名之所以重要,是因为在打字稿环境中,定义文件优先于 javascript 文件。这就是模块导入爆炸的原因。
为了避免指定.js扩展名,您还可以像这样设置目录结构:
src
|- index.ts
|- lib
|- test.js
|- test.d.ts
|- index.[js|ts]
Run Code Online (Sandbox Code Playgroud)
在./lib/index文件中全部从测试中导出:
//./src/lib/index.[js|ts]
export * from './test'
Run Code Online (Sandbox Code Playgroud)
然后从lib导入所有内容:
// ./src/index.ts
import { path } from './lib'
// or
import { path } from './lib/test.js'
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 javascript 和 typescript 的混合(假设您要使用现有代码库转移到 typescript),则需要更新您的tsconfig.json以包含,这样您就不会在 IDE 中收到警告:
{
"compilerOptions": {
"allowJs": true,
"declaration": false
}
}
Run Code Online (Sandbox Code Playgroud)
这样您的 javascript 文件将与打字稿文件一起转换到您的目标目录。
| 归档时间: |
|
| 查看次数: |
17581 次 |
| 最近记录: |