Как сделать возможным использование Typescript с SystemJS и Angular?


Я пытаюсь заставить SystemJS работать с Typescript, но они, похоже, конфликтуют друг с другом.

Как я могу воспользоваться автоматической загрузкой из системы.js без его конфликта с ключевыми словами на Typescript? использование import / require делает Typescript, используя его собственный способ загрузки и ссылки на файлы, хотя он переводит export как module.exports = ..., он не делает то же самое для import

Возможно ли вообще достичь этого, или мне придется ждать Typescript для поддержки ES6 ключевые слова?

3 9

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