Как сделать возможным использование Typescript с SystemJS и Angular?
Я пытаюсь заставить SystemJS работать с Typescript, но они, похоже, конфликтуют друг с другом.
Как я могу воспользоваться автоматической загрузкой из системы.js без его конфликта с ключевыми словами на Typescript? использование import / require делает Typescript, используя его собственный способ загрузки и ссылки на файлы, хотя он переводит export
как module.exports = ...
, он не делает то же самое для import
Возможно ли вообще достичь этого, или мне придется ждать Typescript для поддержки ES6 ключевые слова?
3 ответа:
TypeScript 1.5 добавляет поддержку компиляции в синтаксис модуля ES5 SystemJS.
Автор класса типа:
export class Foo {}
Затем скомпилировать с помощью
tsc --module system foo.ts
Результатом будет модуль ES5, использующий формат SystemJS.
В TypeScript вы напишете следующий оператор импорта...
import dep = require('dep'); console.log(dep);
При компиляции вы передаете флаг модуля:
tsc --module commonjs app.ts
Это указывает TypeScript на целевые модули стиля CommonJS (он также может быть нацелен на AMD, если это необходимо - SystemJS поддерживает оба стиля синтаксиса).
Вывод выглядит следующим образом:
var dep = require('dep'); console.log(dep);
Этот вывод аналогичен следующему примеру из документацииSystemJS .
// library resource var $ = require('jquery'); // -> /lib/jquery.js // format detected automatically console.log('loaded CommonJS');
Если вам нужна дополнительная помощь, вы можете попросить задайте вопрос и включите конкретные примеры, которые демонстрируют проблему, и мы сможем дать более конкретные советы.
Вы можете увидеть здесь то, как я сделал это с traceur вместо Typescript, но это должно работать почти так же, как с Typescript, я добавлю ts, как только смогу снова играть с ним.
Примечание: это больше напоминание о себе или игровая площадка, чем правильное семя
Как уже упоминал Стив сильнейшим моментом SystemJs является то, что вы можете использовать практически любое определение модуля, загрузчик должен определить формат модуля, я лично предпочитаю объявлять модули как в
define([deps...],(deps..){ // ... })
I найдите его похожим на шаблон инъекции конструктора из других языков и фреймворков, и он всегда переводится на тот же Javascript , потому что это Javascript, украшенный функциями класса и стрелки (+anotated с типами the case Typescript).
Также выбор amd показал явно асинхронные намерения, что было бы честью в любом случае, если вы выберете, скажем, синтаксис модуля ES6, потому что код после предложения импорта будет выполняться только тогда, когда зависимости закончат загрузку. хорошенький как и ключевое слово async, оно кажется слишком загадочным для не инициированного
Кстати: и OutOFcontext: приветствия от SA / JHB удивительной работе SystemJS dev Mr. Bedford