Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript:我可以导入文件夹而不必写入index.ts文件吗?_Javascript_Node.js_Typescript_Import_Directory - Fatal编程技术网

Javascript TypeScript:我可以导入文件夹而不必写入index.ts文件吗?

Javascript TypeScript:我可以导入文件夹而不必写入index.ts文件吗?,javascript,node.js,typescript,import,directory,Javascript,Node.js,Typescript,Import,Directory,如果一个项目的大多数目录包含的TypeScript文件不超过2-3个,并且在其他地方导入包含该文件的目录时,应该可以访问这些文件的所有导出,这将导致大量具有可预测内容的index.ts文件 例子 目录:mycomponent my-component-config.ts my-component.ts index.ts index.ts包含什么?当然,它包含 export * from "./my-component-config" export * from "./my-component"

如果一个项目的大多数目录包含的TypeScript文件不超过2-3个,并且在其他地方导入包含该文件的目录时,应该可以访问这些文件的所有导出,这将导致大量具有可预测内容的
index.ts
文件

例子 目录:
mycomponent

my-component-config.ts
my-component.ts
index.ts
index.ts
包含什么?当然,它包含

export * from "./my-component-config"
export * from "./my-component"
这是显而易见的

对于10个组件目录,这意味着:10个包含100%冗余信息的
index.ts
文件

如何使TypeScript(/Node)动态隐式创建不需要存储在硬盘上的
index.ts
文件?

组件在TypeScript&Node.js中不是一个定义良好的概念,但是模块和包是

通常,模块是一个源文件,让我们忽略异常。因此,通过为每个目录创建
index.ts
文件,您可以生成只聚合了几个文件/模块的外观模块。如果您希望做的只是将源文件组织到逻辑组件中,那么您不需要每个目录的外观,只需单独导入每个文件,而不是一次导入一个目录

在更高的级别上,如果您有一个包含多个不同目录的包,那么它可以在包级别上有一个单个
index.ts
外观。该文件将只导出每个文件/模块一次,而不需要为每个目录导出
index.ts
。因此,这可能看起来像(假设每个文件都是一个.ts文件):


我不认为有一种方法可以在没有索引文件的情况下导入TS中的目录

如果您没有回答,请检查这些问题


我认为最好的方法是编写一个脚本来生成导入目录中所有文件的
index.ts
,并在每次添加/删除文件时运行该脚本。

我明白了。通常我甚至单独导入文件,而不是一次导入一个目录。但由于我更喜欢处理短路径,通常不超过2段,所以我更喜欢导入目录。我举一个例子:由于有一个
index.ts
文件,我可以使用
import{dialog}从“lib/dialog”
导入
lib/dialog/dialog.ts
,而不是从“lib/dialog/dialog”导入
import{dialog}。看到区别了吗?现在想象一下,我在数百个TypeScript文件中进行了类似的导入。你是指“/lib/dialog/dialog”
中的
。我认为使用至少一个façade是最安全的,这样任何消费模块都不知道内部目录结构。我的意思是“lib/dialog/dialog”
中的
,因为它的父文件夹被指定为模块目录。没有任何正面的行走不会给我带来相当大的安全损失。但将立面用于小部件会给我带来相当大的效率损失。我可以通过使用访问修饰符和
只读
来保证安全。这是我个人的观点,但我建议您不要使用深入目录结构的外部引用(例如,从“lib/dialog/dialog”中的
.IMHO,这暴露了太多的包
lib
的内部结构。这不是一个硬性规定,如果你想在GitHub上共享一个特定的项目或其他东西,我很乐意回顾和评论你的具体案例。同时也要认识到你的包级外观可能包含的不仅仅是再导出语句。最好公开一个使用
对话框
类的更高级别函数,而不是(或除此之外)公开类本身。
export * from './IntStream';
export * from './misc/Interval';
export * from './misc/IntervalSet';
export * from './Lexer';
...