2016-07-29 1 views
1

Я новичок в TypeScript и пытаюсь преобразовать свой текущий JavaScript в TypeScript.Импорт внутри объекта

В JS У меня есть конструкции, как:

var roles = { 
    x: require('role.x'), 
    y: require('role.y') 
}; 

С целью позже итерация этих ролей, как это:

for (var index in roles) { 
    var role = new roles[index]; 
    if (someObject.role == role.role) { 
    role.run(someObject); 
    } 
} 

В машинописном Однако, кажется, я не могу сделать это:

let roles = { 
    x: import X from "./roles/x" 
} 

Который дает

Error:(11, 14) TS1109: Expression expected. 
Error:(11, 21) TS1005: ':' expected. 
Error:(11, 31) TS1005: ',' expected. 
Error:(11, 36) TS1005: ':' expected. 

Так какой же был бы эквивалент TypeScript для достижения того же -or- альтернативного метода, который является более чистым/способом TypeScript?

ответ

1

Речь идет не о TypeScript, а о ES6. Импорт статичны, они не могут быть использованы динамически:

import * as x from "./roles/x"; 
import * as y from "./roles/y"; 
let roles = { 
    x: x, 
    y: y 
}; 

См a good introduction to ES6 modules here. В разделе «Статические и динамические»:

Для динамического языка JavaScript стал на удивление статичной модульной системой.

  • Всех ароматы import и export разрешается только при верхнем уровне в модуле. Условные импорты или экспорт отсутствуют, и вы не можете использовать импорт в области функций.

  • Все экспортируемые идентификаторы должны быть явно экспортированы по имени в исходном коде. Вы не можете программно прокручивать массив и экспортировать кучу имен в соответствии с данными.

+0

Несмотря на то, что оба ответа верны, я соглашусь с этим для праймера модулей ES6 и окончательного 'и вы не можете использовать импорт в области функций.' Спасибо! –

+0

Нет проблем, плюс, он первым ответил :) – AlexG

2

импорт ES6 должен быть найден на верхнем уровне модуля, иначе это ошибка синтаксиса.

import * as x from "./roles/x"; 
import * as y from "./roles/y"; 

let roles = {x, y}; 
Смежные вопросы