有在打字稿動態進口的機制,雖然有所不同實施基於模塊的那種。
下面的例子(對於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());
}
});