Вызов глобальной переменной внутри модуля Typescript

201

У меня есть файл typescript с именем Projects.ts, который я хочу ссылаться на глобальную переменную, объявленную в плагине bootstrap под названием bootbox.js.

Я хочу получить доступ к переменной с именем bootbox из классов typescript.

Возможно ли это?

Теги:

5 ответов

336

Вам нужно сообщить компилятору, что он был объявлен:

declare var bootbox: any;

Если у вас есть более качественная информация о типе, вы можете добавить это тоже вместо any.

  • 4
    Может пропустить «любой» бит на самом деле.
  • 32
    Это не было бы хорошим примером для формата вопросов и ответов, хотя, как я предлагаю, они добавляют конкретную информацию о типе, а ответ показывает, как и где они ее разместят.
Показать ещё 7 комментариев
24

Для тех, кто еще не знал, вам нужно поставить оператор declare вне вашего class следующим образом:

declare var Chart: any;

@Component({
  selector: 'my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.scss']
})

export class MyComponent {
    //you can use Chart now and compiler wont complain
    private color = Chart.color;
}

В TypeScript используется ключевое слово declare, где вы хотите определить переменную, которая, возможно, не была создана из файла TypeScript.

Как вы говорите компилятору, я знаю, что эта переменная будет иметь значение во время выполнения, поэтому не бросайте ошибку компиляции.

  • 1
    Этот ответ применим только к Angular 2 или более поздней версии. @Component - это украшение, специфичное для @Component .
  • 0
    @Dai там не важна версия Angular, потому что мы используем внешние объекты javascript и их функции в AngularJS 1.6 + Typescript
8

Если это то, что вы ссылаетесь, но не мутируете, используйте const:

declare const bootbox;
7

Решения Sohnee чище, но вы также можете попробовать

window["bootbox"]
-3

Загрузите файлы [bootbox typings] (https://www.nuget.org/packages/bootbox.TypeScript.DefinitelyTyped/)

Затем добавьте ссылку на него внутри вашего.ts файла.

  • 2
    Пожалуйста, не размещайте какой-либо инструмент или библиотеку в качестве ответа. По крайней мере, продемонстрируйте, как это решает проблему в самом ответе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню