Typoskript Typ-Definitionen für ServiceWorker

Schreibe ich einen service für meine eckige 2-app mit Typoskript. Der Dienst nutzt chrome ServiceWorker zu hören, für push-Benachrichtigungen (siehe tutorial). Der code (javascript) nutzt navigator erst sehen, wenn serviceWorker unterstützt wird, dann fährt Fort, um die Registrierung abzuschließen etc., d.h.,

if ('serviceWorker' in navigator) {
  console.log('Service Worker is supported');
  navigator.serviceWorker.register('sw.js').then(function() {
    return navigator.serviceWorker.ready;
  }).then(function(reg) {
    console.log('Service Worker is ready :^)', reg);
      //TODO
  }).catch(function(error) {
    console.log('Service Worker error :^(', error);
  });
}

Möchte ich implemenet die oben mit Hilfe von TypeScript. Jedoch, die aktuelle lib.d.ts verwendet, die von der TypeScript-compiler (siehe unten) wird angezeigt, keine Definitionen festgelegt, die auf Navigator für die serviceWorker oder der mit Ihr verbundenen Methoden wie serviceWorker.register (ich denke, da es ein chrome-spezifische Implementierung).

interface Navigator extends Object, NavigatorID, NavigatorOnLine, NavigatorContentUtils, NavigatorStorageUtils, NavigatorGeolocation, MSNavigatorDoNotTrack, MSFileSaver, NavigatorUserMedia {
    readonly appCodeName: string;
    readonly cookieEnabled: boolean;
    readonly language: string;
    readonly maxTouchPoints: number;
    readonly mimeTypes: MimeTypeArray;
    readonly msManipulationViewsEnabled: boolean;
    readonly msMaxTouchPoints: number;
    readonly msPointerEnabled: boolean;
    readonly plugins: PluginArray;
    readonly pointerEnabled: boolean;
    readonly webdriver: boolean;
    getGamepads(): Gamepad[];
    javaEnabled(): boolean;
    msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void;
    requestMediaKeySystemAccess(keySystem: string, supportedConfigurations: MediaKeySystemConfiguration[]): PromiseLike<MediaKeySystemAccess>;
    vibrate(pattern: number | number[]): boolean;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
}

Das Ergebnis ist, dass ich konfrontiert bin mit der Zusammenstellung von Fehlern, da der compiler nicht finden können, die damit verbundenen serviceWorker Arten. Gegeben, ich bin neu in JavaScript und TypeScript, ich bin versucht zu bestimmen, der beste Weg zu gehen. Ich verstehe die Optionen:

  1. Halten Sie den js-code und Sie einfach ignorieren Sie den Kompilierungsfehler (nicht
    ideal).
  2. Halten Sie den js-code und irgendwie unterdrücken die Art von Fehlern während der
    Zusammenstellung.
  3. Eine bereits vorhandene Typoskript Definitionen Bibliothek,
    hat serviceWorker definiert und beinhalten, dass während der Kompilierung.
  4. Schreibe meine eigenen Typoskript-definitions-Datei für den navigator oder irgendwie
    Erweiterung der bestehenden lib.d.ts

Salbei Beratung über die beste option sehr geschätzt.

Update

Versucht zu werfen, um alle zu entfernen, die Zusammenstellung von Fehlern, d.h.,

var nav = <any> navigator;

    if ('serviceWorker' in nav) {
       nav.serviceWorker.register('sw.js')
           .then(function(reg) {
                    console.log('yey!', <any> reg);
           }).catch(function(err) {
                console.log('boo!', <any> err);
    });

aber jetzt vor neuen Fehler, d.h.,

error TS7006: Parameter 'reg' implicitly has an 'any' type.
error TS7006: Parameter 'error' implicitly has an 'any' type.

Auch, der Versuchung zu schreiben, die Definitionen für die ServiceWorker mit diesen details. Allerdings noch nie gemacht, daher braucht es einige übung!

InformationsquelleAutor James B | 2016-07-03
Schreibe einen Kommentar