我正在将一个遗留代码迁移到typescript,并且一些使用内联的文件需要性能提升(延迟加载(:
//DataClass.js
const Data = {
get Phones() {
return require('./phones.ts').default;
},
get Users() {
return require('./users.ts').default;
},
在将文件转换为ts
之前,intelisense运行得非常好,并为我提供了电话和用户的所有道具的自动完成功能(它们都是ts文件(。但是在将文件扩展名更改为ts
之后,require语句返回any
,而我正在丢失类型。
我无法将代码转换为await import
,因为这意味着要更改所有遗留的代码库(用于支持异步(。我不介意把这个模块作为.js
文件,但我会丢失从这个文件导入数据的每个.ts
文件上的类型,所以即使手机是强类型的,我也可以从中受益。
有没有办法解决这个问题?
好的,这不是一个解决方案,而是一个变通方法(我是OP(,我决定保留具有js
扩展名的文件,并创建一个具有相同名称的单独ts
文件,用于获取类型。当有两个文件具有相同的名称时,bundler更喜欢js
文件,因此将使用具有内联require的js
文件的内容,但typescript编译器更喜欢ts
文件,因此我在开发时进行所有类型检查,并且在运行tsc
时,typscript将为该文件生成正确的声明。
//DataClass.js (real file, will be included in the real bundle)
export const Data = {
get Phones() {
return require('./phones.ts').default;
},
get Users() {
return require('./users.ts').default;
}
}
//DataClass.ts (fake file, will help typescript compiler to generate declaration file for the index)
import phones from './phones.ts';
import users from './users.ts'
export const Data = {phones, users};
这绝对不是一个解决方案,只是一个令人讨厌的变通方法。但遗憾的是,这是我迄今为止唯一的解决方案。如果有人知道更好的解决方案,请在这里发布。