我是TypeScript的新手。我目前正在学习使用Typescript语言的NodeJS Loopback 4 框架。我的问题是如何将某些功能(已在JS文件中导出的类)导入到我的TS文件中。经过几次搜索后,它仍然无法正常工作。 例如:
// /src/index.ts
import {plus} from './lib/test';
console.log(plus(1,2));
// /src/lib/test.js
export function plus(x, y) {
return x + y;
}
我也尝试使用这样的定义打字稿
// /src/lib/test.d.ts
export declare function plus(x: number, y: number): number;
但是在index.ts文件中导入此功能时仍然出现错误
错误:找不到模块“ ./lib/test” 在Function.Module._resolveFilename(module.js:543:15)
答案 0 :(得分:2)
由于tsconfig.json会导出声明,因此似乎未启用“ allowJs”。
您是否有理由不希望它成为打字稿文件?如果将test.js更改为test.ts,则将其设置为.ts应该可以在索引文件中识别它。
好吧,就像@ maaz-syed-adeeb提到的那样容易解决:
import { path } from './lib/test.js'
扩展名之所以重要,是因为在打字稿环境中,定义文件比javascript文件具有更高的优先级。这就是为什么模块导入被取消的原因。
为避免指定.js
扩展名,您还可以像这样设置目录结构:
src
|- index.ts
|- lib
|- test.js
|- test.d.ts
|- index.[js|ts]
./lib/index
文件中的所有内容均来自测试:
//./src/lib/index.[js|ts]
export * from './test'
,然后从lib导入所有内容:
// ./src/index.ts
import { path } from './lib'
// or
import { path } from './lib/test.js'
如果您使用的是javascript和打字稿的混合体(例如,您要迁移到具有现有代码库的打字稿),则需要更新tsconfig.json
使其包含在内,这样您就不会收到警告您的IDE:
{
"compilerOptions": {
"allowJs": true,
"declaration": false
}
}
因此,您的javascript文件将与打字稿文件一起被编译到目标目录中。