2016-02-09 2 views
1

Я пытаюсь правильно включить сторонний модуль в TypeScript и Angular 2 с помощью SystemJS. В этом случае сторонняя библиотека, по-видимому, является amCharts, но предположительно это может быть любая библиотека.Включить поток включения TypeScript

Вот что я сейчас делаю (и это работает):

  • Установите библиотеку с НПМ
  • загрузить его в моей index.html расположение:

index.html:

<script src="node_modules/amcharts3/amcharts/amcharts.js"></script> 
<script src="node_modules/amcharts3/amcharts/serial.js"></script> 
  • Тогда я просто использовать его в моем компоненте:

Компонент:

export class GraphComponent { 
    ngOnInit() { 
    AmCharts.makeChart(...); // draw chart 
    } 
} 

Это работает и мой график делает хорошо, но мой машинопись компилятор (в Atom) жалуется, что «[с] ANNOT найти имя„AmCharts“ "в моем файле компонента. Это имеет смысл, поскольку я никогда не объявлял его в этом файле. Включение двух сценариев просто делает имя глобально доступным.

Что-то заставляет меня думать, что я действительно должен делать это

  1. Каким-то образом использовать SystemJS таким образом, чтобы не включать вручную скрипты в моих index.html
  2. Используйте машинописные import заявления, чтобы загрузить библиотеку вместо зависимости по глобальной переменной

Может ли кто-нибудь указать мне правильное направление?

+0

Что вопрос? Вы уже знаете, что вам нужно делать, просто сделайте это. –

+1

@BryanChen Как я уже сказал, это работает, но я не думаю, что это лучший способ. Я перечисляю два момента, которые я не знаю, как реализовать, что я думаю, сделает это лучше. – weltschmerz

ответ

0

Файлы декларации (* .d.ts) предоставляют объявления TypeScript для структур в JavaScript-коде. Лучшее место для поиска - DefinitelyTyped, и вы можете найти файл декларации для AmCharts here.

Вы можете сказать transpiler о файле декларации, добавив строку, которая ссылается на это:

/// <reference path="AmCharts.d.ts" /> 
+0

Yup. Это решит вашу проблему. Поместите эту строку, где вам нужны амхарты –

+0

Обратите внимание, что вместо использования скрипта вы, вероятно, захотите создать глобальную прокладку для диаграмм am. И да, «импорт AmCharts из« amcharts »является лучшей практикой, чем принятие глобальной переменной. (Вам все равно нужен ссылочный путь, чтобы заставить ts работать) –

+0

@MattScarpino Я положил это в начало моего файла компонента '/// ' (взято из [здесь] (https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/amcharts/AmCharts.d.ts)), но он все еще не может найти имя «AmCharts». Кроме того, @UAvalos, как я могу создать прокладку и/или использовать импорт вместо использования глобальной переменной? – weltschmerz

Смежные вопросы