Javascript Typescript通配符是否将所有模块名称导入当前命名空间?

Javascript Typescript通配符是否将所有模块名称导入当前命名空间?,javascript,Javascript,我希望能够不必在使用该模块值的所有位置前面键入模块名称(甚至是模块的别名)。(例如,我宁愿不必运行C预处理器,这样我就可以做#包含类型的东西。) (关闭但没有雪茄:) 我想要 import * from "./MyModule"; console.log( foobar ); 而不是像这样烦人的事情: console.log( MyModule.foobar ) 或: Typescript通配符是否将所有模块名称导入当前命名空间? 这是一种坏习惯为什么? 假设你有几百个模块在你的MyModu

我希望能够不必在使用该模块值的所有位置前面键入模块名称(甚至是模块的别名)。(例如,我宁愿不必运行C预处理器,这样我就可以做#包含类型的东西。)

(关闭但没有雪茄:)

我想要

import * from "./MyModule";
console.log( foobar );
而不是像这样烦人的事情:

console.log( MyModule.foobar )
或:


Typescript通配符是否将所有模块名称导入当前命名空间?

这是一种坏习惯为什么?

假设你有几百个模块在你的MyModule中,你想导入所有的模块想想有多少不必要的模块要导入而你可能不会使用,这会占用内存并使你的应用程序变慢,你应该导入你想使用的唯一模块

e、 g

如果您仍然想使用通配符,它将导入您的所有模块

e、 g

然后,你也应该使用树摇动,这样在部署你的应用程序时,你就可以摆脱所有其他不必要的模块

希望这有帮助

import * from "./MyModule";
不属于ES模块规范的一部分。在不命名成员的情况下,不能简单地将成员注入作用域。每当模块发生更改时,都可能出现标识符冲突

正如@haim770在他的评论中指出的那样,这与饱受诟病(而且非常正确)的
with
声明非常相似


这是绝对不允许的。

为什么不想将模块导入特定变量?像这样
从“/myModule”导入{yourVariable}您想要的是一个全球
,具有
等价物,被认为是一个糟糕的做法,敬请欣赏!我个人完全不同意这个理由,至少对小型项目是这样。(事实上,它违背了Typescript可能试图遵循的一些标准,这更多的是来自权威的一个论点,我可以不高兴地接受,即使我在道德上也不喜欢这个论点。)对,这不是关于性能,它只是显式的依赖声明和范围。在其他语言中,我们经常用于合并导入整个名称空间,但ECMAScript不允许这样做。这部分与语言的设计方式有关,浏览器中的全局对象和空间对象实际上是窗口,它有大量的成员。我认为对于真正的小程序来说,这有点麻烦,就像语法税,但这是一种值得支付的税。当然,您可以创建一个附加globals的prelude模块,但是当您将文件捆绑到on file时会发生什么呢?它还将捆绑您未使用的所有不必要的模块。从性能上讲,我的意思是在浏览器中加载未使用的代码会很繁重。@MrJSingh理论上,如果将导入注入到周围的作用域中,则仍然可以对导入进行树抖动。我只是认为性能不是主要原因,我认为它与可维护性有关。
import {A, D} from './MyModules';
import * as http from "http"
import * from "./MyModule";