Я начал интегрировать наш шаблон ArcGis JS в используемый нами конвейер сборки веб-пакетов.
Чтобы выполнить это, нам нужно немного изменить рефакторинг и начать использовать Esri-Loader (https://github.com/Esri/esri-loader),, который по сути превращает dojos require function в обещание.
Действительно простой пример выглядит так:
start = () => {
return EsriLoader.loadModules(['esri/Map', 'esri/views/MapView', "esri/Basemap"])
.then(([Map, MapView, Basemap]) => {
const map = new Map({
basemap: "streets"
});
const view = new MapView({
map: map,
container: "map"
});
});
}
Сначала я попытался записать вызов .then()
следующим образом: .then((Map, MapView, Basemap) => { ... }
, но получал следующую ошибку компилятора:
Аргумент типа '(Map: any, MapView: any, Basemap: any) => void' is
нельзя назначить параметру типа '(значение: любое []) => void |
PromiseLike.
Хорошо, подпись не складывается:
function loadModules(modules: string[], loadScriptOptions?: ILoadScriptOptions): Promise<any[]>;
Таким образом, правильный способ сделать это, как указано выше: .then(([Map, MapView, Basemap]) => { ... }
И в этот момент мое понимание достигло предела. В следующем теле метода я могу вызывать Map
, MapView
и BaseMap
по их именам, в то время как я ожидал, что это будет массив, к которому я должен был обращаться к javascript-ish, например Arguments[0][0]
, Arguments[0][1]
и так далее, поскольку я передал только один объект типа Array<any>
.
Пожалуйста, объясните мне, почему и как это возможно, или если я делаю что-то ужасно неправильное здесь.