Использование библиотеки javascript из проекта Angular2 на основе Typescript

Я пытаюсь создать концептуальное приложение с Angular 2 и Typescript. Я хотел включить библиотеку уведомлений toastr и надеялся, что будет простой способ ее получить. работает без файлов определений.

Я создал файл в каталоге общих служб с именем toastr.d.ts]:

  declare module "toastr" {
//   var noTypeInfoYet: any; 
//   export = noTypeInfoYet;
}

который вызывается из сервиса common.ts

 /// <reference path="toastr.d.ts" />
import {Injectable} from 'angular2/core';
import {toastr} from 'toastr';

@Injectable()
export class Common {

  constructor() {}
  
  log(message:string){
      toastr(message);
      console.log(message);
  }

}

однако я получаю ошибку компиляции: [DiffingTSCompiler]: Typescript обнаружил следующие ошибки: app/services/common/common.ts (3,9): модуль «toastr» не имеет экспортированного члена «toastr».

Весь код можно найти в Cloud 9.


person Mark    schedule 18.01.2016    source источник
comment
Честно говоря, я бы использовал tsd и фактический файл определения Toastr. Сначала я был немного расстроен тем, что мне пришлось их использовать. Взгляните на фактический файл определения Toastr, он экспортирует модуль, а ваш нет.   -  person Sunil D.    schedule 18.01.2016
comment
К сожалению, это также означает, что я также должен включить определение для jquery. Я надеялся, что это может быть прямолинейно, когда я работал со сторонними библиотеками, просто чтобы их заглушить.   -  person Mark    schedule 18.01.2016
comment
Я использую официальный файл определения Toastr (наряду с jQuery). У меня разные проблемы, я включаю его с import * as toastr from "toastr" и использую как toastr.info(... Но toastr.options не работает, что бы я ни устанавливал, похоже, что toastr использует настройки по умолчанию. Кажется, что каждый раз он создает новую переменную. .. Я еще не отлаживал его...   -  person Vlado Tesanovic    schedule 18.01.2016
comment
На мой взгляд, время, необходимое для установки и определения tsd, того стоит. Вы устанавливаете tsd, запускаете команду: tsd install toastr --save и готово.   -  person Sunil D.    schedule 18.01.2016
comment
Не совсем, я на самом деле пробовал это после вашего первого сообщения только для того, чтобы получить ошибку в определениях типов JQuery. После небольшого исследования возникла проблема с определениями типов Angular2 и JQuery, когда они установлены с использованием TSD. Дальнейшие исследования показывают, что типизация заменит tsd. Я собираюсь встать на путь машинописи.   -  person Mark    schedule 18.01.2016
comment
Хорошо, точка принята! Он отлично работает с Angular 1.x :) Я думаю, это часть жизни на грани с Angular 2. Нет причин, по которым вы не можете придерживаться своего собственного файла объявлений, ошибка, которую вы получили, была довольно ясной... вы просто нужно экспортировать что-то из файла определений и убедиться, что вы также поместили туда методы/свойства Toastr, которые вы собираетесь использовать.   -  person Sunil D.    schedule 18.01.2016
comment
Этот ответ Тьерри Темплиера может иметь значение: stackoverflow.com/a/34872063/3546482   -  person Fan Li    schedule 19.01.2016


Ответы (1)


Следующее:

import {toastr} from 'toastr';

неправильно. toastr не экспортирует переменную toastr на самом деле экспорт корневого уровня IS toastr. Исправить:

import * as toastr from 'toastr';
person basarat    schedule 18.01.2016