惰性模块加载在打字稿中如何工作?

在此打字本书籍部分中,作者使用以下示例解释延迟加载:

import foo = require('foo');

export function loadFoo() {
    // This is lazy loading `foo` and using the original module *only* as a type annotation
    var _foo: typeof foo = require('foo');
    // Now use `_foo` as a variable instead of `foo`.
}

根据作者的说法,typescript仅foo在首次调用时加载类型,require但在foo创建var时在第二次调用时加载创建所需的整个模块var _foo

这是如何运作的。有人可以显示引擎盖下发生的事情的更详细示例吗?

蒿甲醚

打字稿手册中提到

编译器检测所发出的JavaScript中是否使用了每个模块。如果模块标识符仅用作类型注释的一部分,而从未用作表达式,则不会对该模块发出require调用。

在此示例中,第一个foo(不带下划线的)在类型注释中仅用作一次的参数typeof,因此require('foo')在生成的javascript代码中省略了第一个您可以检查生成的.js文件以查看其内容,require在runtine中只有一次调用“第二”。

loadFoo()被调用时,require('foo')被执行,调用内置的node.jsrequire()函数,该函数foo以通常的方式在运行时加载模块。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章