有在打字稿动态进口的机制,虽然有所不同实施基于模块的那种。
下面的例子(对于AMD)将有条件地加载模块:
declare function require(moduleNames: string[], onLoad: (...args: any[]) => void): void;
import * as ModuleAlias from './mod';
const someCondition = true;
if (someCondition) {
require(["./mod"], (module: typeof ModuleAlias) => {
console.log(module.go());
});
}
在该文件的顶部的import
语句是惰性的,并且该模块的实际负荷不会发生,除非条件if (someCondition)
是真的。
你可以通过改变someCondition
,看到网络选项卡上的影响进行测试,或者你可以看看生成的代码......在动力版本,"./mod"
不会出现在define
通话。在非动态的一个,它的确如此。
通过动态加载
define(["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const someCondition = true;
if (someCondition) {
require(["./mod"], (module) => {
console.log(module.go());
});
}
});
没有动态加载
define(["require", "exports", "./mod"], function (require, exports, ModuleAlias) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const someCondition = true;
if (someCondition) {
console.log(ModuleAlias.go());
}
});