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

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

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

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


person pocesar    schedule 11.11.2014    source источник


Ответы (3)


В TypeScript 1.5 добавлена ​​поддержка компиляции в синтаксис модуля ES5 SystemJS.

Создайте класс, например:

export class Foo {}

Затем скомпилируйте с

tsc --module system foo.ts

В результате получится модуль ES5, использующий формат SystemJS.

person Micah Zoltu    schedule 09.06.2015

В 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');

Если вам нужна дополнительная помощь, вы можете задать вопрос и включить конкретные примеры, демонстрирующие проблему, и мы сможем дать более конкретный совет.

person Fenton    schedule 11.11.2014
comment
ну, SystemJS использует синтаксис ES6 и traceur, это самое большое различие, которое я нашел между ними. import _ from 'something' ошибки в машинописном тексте. Поскольку Typescript компилируется в ES5, я никогда не смогу получить из него работающий «родной» модуль ES6, и он не работает с SystemJS. - person pocesar; 15.11.2014
comment
Поддержка ES6 находится в дорожной карте для TypeScript (т.е. компиляции в режиме ES6). - person Fenton; 15.11.2014
comment
флаг компиляции в es6, вероятно, то, что я ищу, всякий раз, когда он реализован. - person iksose; 06.05.2015
comment
Он находится в бета-версии TypeScript 1.5. - person Fenton; 07.05.2015

вы можете увидеть здесь, как я это сделал с помощью traceur вместо Typescript, но это должно работать почти то же самое с Typescript, я добавлю ts, как только смогу снова поиграть с ним.

ПРИМЕЧАНИЕ. Это скорее напоминание о себе или игровая площадка, чем правильное семя.

Как упомянул Стив, самая сильная сторона SystemJs заключается в том, что вы можете использовать практически любое определение модуля, загрузчик должен определять формат модуля, лично я предпочитаю объявлять модули, как в

define([deps...],(deps..){
    // ...
})

Я считаю, что это похоже на шаблон внедрения конструктора из других языков и фреймворков, и он всегда переводится в один и тот же Javascript, потому что это Javascript, украшенный классовыми и стрелочными функциями (+ аннотированный типами в случае Typescript).

Также выбор amd демонстрирует явно асинхронные намерения, что в любом случае будет честью, если вы выберете, скажем, синтаксис модуля ES6, потому что код после предложения импорта будет выполняться только после завершения загрузки зависимостей. очень похоже на ключевое слово async, оно кажется слишком загадочным для неинициированных

Кстати: и OutOFcontext: Приветствую вас от SA / JHB за потрясающую работу разработчика SystemJS г-на Бедфорда.

person Dan    schedule 12.11.2014