在此打字本书籍部分中,作者使用以下示例解释延迟加载:
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] 删除。
我来说两句