Ich brauche ein Typoskript, um nicht mehr über meinen Code zu klagen. Es läuft gut im Browser, aber Vollbild-API sind noch nicht offiziell, so dass die Typoskript-Definitionen nicht auf dem neuesten Stand sind.Typoskript: Überschreiben/Erweitern von Lib.d.ts mit bereits vorhandenem Identifier
Ich rufe document.documentElement.msRequestFullscreen auf. Dies bewirkt, dass Typ-Fehler:
Property 'msRequestFullscreen' does not exist on type 'HTMLElement'.
Upon bei lib.d.ts suchen, finde ich diese:
documentElement: HTMLElement;
So document gesetzt Htmlelement einzugeben. Ich habe versucht, eine benutzerdefinierte Definition hinzuzufügen, um documentElement zu überschreiben. My Custom Definition:
// Extend Document Typings
interface Document {
msExitFullscreen: any;
mozCancelFullScreen: any;
documentElement: {
msRequestFullscreen: any;
mozRequestFullScreen: any;
}
}
Ich habe versucht, die Schnittstelle für Dokument erstreckt, aber es gibt Fehler
Fehler ist:
lib.d.ts:5704:5
Duplicate identifier 'documentElement'.
Meine Typoskript Klasse
export class ToggleFullScreen {
viewFullScreenTriggerID: string;
viewFullScreenClass: string;
cancelFullScreenClass: string;
viewFullscreenElem: any;
activeIcon: string;
notFullscreenIcon: string;
isFullscreenIcon: string
constructor() {
this.viewFullScreenTriggerID = "#fullScreenTrigger";
this.viewFullScreenClass = "not-fullscreen";
this.cancelFullScreenClass = "is-fullscreen";
this.notFullscreenIcon = "/assets/icon/fullscreen-enter.svg";
this.isFullscreenIcon = "/assets/icon/fullscreen-exit.svg";
this.activeIcon = this.notFullscreenIcon;
}
toggleFullScreen() {
this.viewFullscreenElem = document.querySelector(this.viewFullScreenTriggerID);
if (this.viewFullscreenElem.classList.contains(this.viewFullScreenClass)) {
var docElm = document.documentElement;
if (docElm.requestFullscreen) {
docElm.requestFullscreen();
} else if (docElm.msRequestFullscreen) {
docElm.msRequestFullscreen();
} else if (docElm.mozRequestFullScreen) {
docElm.mozRequestFullScreen();
} else if (docElm.webkitRequestFullScreen) {
docElm.webkitRequestFullScreen();
}
this.viewFullscreenElem.classList.toggle(this.viewFullScreenClass);
this.viewFullscreenElem.classList.toggle(this.cancelFullScreenClass);
this.activeIcon = this.isFullscreenIcon;
}
else if (this.viewFullscreenElem.classList.contains(this.cancelFullScreenClass)) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
this.viewFullscreenElem.classList.toggle(this.viewFullScreenClass);
this.viewFullscreenElem.classList.toggle(this.cancelFullScreenClass);
this.activeIcon = this.notFullscreenIcon;
}
}
}
Was die richtige ist Möglichkeit, Fehler beim Kompilieren von Typoskripten zu stoppen?
UPDATE: Ich habe einen Workaround gefunden. Anstatt zu versuchen, documentElement zu überschreiben, das auf HTMLElement festgelegt ist, habe ich HTMLElement erweitert und die fehlenden Eigenschaften hinzugefügt.
// Extend Document Typings
interface Document {
msExitFullscreen: any;
mozCancelFullScreen: any;
}
interface HTMLElement {
msRequestFullscreen(): void;
mozRequestFullScreen(): void;
}
Dank Ich habe das gerade herausgefunden, als du gepostet hast. Eigentlich scheint es erforderlich zu sein, dass ich 'document.Element.requestFullscreen' verwende, aber Ihre Antwort ist immer noch hilfreich bei der Lösung der ursprünglichen Frage über Interfaces. – TetraDev
Ja, ich sehe jetzt, dass Sie Ihre Antwort aktualisiert haben.Stellen Sie sicher, dass Sie die Methoden zu "Element" und nicht zu "HTMLElement" hinzufügen. –
Will, nur neugierig, warum sollte es "Element" anstelle von "HTMLElement" sein, wenn die Typdefinition, die ich erweitere, ursprünglich 'documentElement: HTMLElement' ist? Es scheint zu kompilieren, wenn ich eines verwende. – TetraDev