Wywołaj zmienną globalną wewnątrz modułu

248

Mam plik maszynopisu o nazwie Projects.ts, że chcę odwoływać się do zmiennej globalnej zadeklarowanej we wtyczce bootstrap o nazwie bootbox.js.

Chcę uzyskać dostęp do zmiennej wywoływanej bootboxz klas TypeScript.

Czy to możliwe?

użytkownik1027303
źródło
3
Istnieje definicja Definitywnie typowana dla bootboxa teraz nuget.org/packages/bootbox.TypeScript.DefinitelyTyped
ThisGuy

Odpowiedzi:

404

Musisz poinformować kompilator, że został zadeklarowany:

declare var bootbox: any;

Jeśli masz lepsze informacje o typie, możesz je dodać zamiast any.

Fenton
źródło
5
Może pominąć „dowolne” w rzeczywistości.
Oleg Mihailik
37
Nie byłby to jednak dobry przykład formatu pytań i odpowiedzi, ponieważ sugeruję, aby dodawali określone informacje o typie, a odpowiedź pokazuje, jak i gdzie je umieścić.
Fenton,
14
Dla nas początkujących na maszynie, gdzie umieszczamy to declareoświadczenie?
Bob Horn,
Czy to dobre rozwiązanie również dla funkcji globalnych? Umieszczasz coś takiego declare var myFunction: any;?
jonathanrz
1
@jonathanrz tak, może to być także konkretny podpis, jeśli chcesz posunąć się tak daleko, na przykładdeclare var myFunction: (input: string) => void;
Fenton
47

Dla tych, którzy jeszcze tego nie wiedzieli, musielibyście umieścić declareoświadczenie poza classtym tak:

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;
}

W TypeScriptdeklarowanym słowie kluczowym używane jest miejsce, w którym chcesz zdefiniować zmienną, która mogła nie pochodzić zTypeScript pliku.

To tak, jakbyś powiedział kompilatorowi, że wiem, że ta zmienna będzie miała wartość w czasie wykonywania, więc nie rzucaj błędu kompilacji.

Himanshu Arora
źródło
15

Jeśli jest to coś, do czego się odwołujesz, ale nigdy nie mutujesz, użyj const:

declare const bootbox;
Josh Wulf
źródło
12

Rozwiązania Sohnee są czystsze, ale możesz także spróbować

window["bootbox"]
Prusdrum
źródło
3

Jeśli chcesz mieć odniesienie do tej zmiennej w całym projekcie, utwórz d.tsplik, np globals.d.ts. Wypełnij go deklaracjami zmiennych globalnych, np .:

declare const BootBox: 'boot' | 'box';

Teraz możesz odwoływać się do niego w dowolnym miejscu w projekcie, tak po prostu:

const bootbox = BootBox;

Oto przykład .

Krzysztof Grzybek
źródło
-4

Pobierz typy bootbox

Następnie dodaj do niego odniesienie w pliku .ts.

ser savv
źródło
2
Proszę nie zamieszczać w odpowiedzi tylko jakiegoś narzędzia lub biblioteki. Przynajmniej pokaż, jak rozwiązuje problem w samej odpowiedzi.
Filnor