私のコードについて不平を言うのを防ぐためにtypescriptを取得する必要があります。それはブラウザで正常に動作しますが、フルスクリーンのapiは公式ではないので、タイスクリプトの定義は最新ではありません。Typescript:既存の識別子を使ってLib.d.tsを上書き/拡張する
私はdocument.documentElement.msRequestFullscreenを呼び出しています。これは、型エラーが発生します。
lib.d.tsを見ていたらProperty 'msRequestFullscreen' does not exist on type 'HTMLElement'.
、私はこれを見つける:
documentElement: HTMLElement;
そうにdocumentElementはのHTMLElementを入力するように設定されています。私はdocumentElementをオーバーライドするカスタム定義を追加しようとしました。マイカスタム定義:
// Extend Document Typings
interface Document {
msExitFullscreen: any;
mozCancelFullScreen: any;
documentElement: {
msRequestFullscreen: any;
mozRequestFullScreen: any;
}
}
私はドキュメントのためのインターフェイスを拡張しようとしたが、それは
エラーがあるエラーを与える:
lib.d.ts:5704:5
Duplicate identifier 'documentElement'.
マイtypescriptですクラスが適切である何
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;
}
}
}
typescriptのコンパイルエラーを止めるには?
更新日:回避策が見つかりました。 HTMLElement型に設定されているdocumentElementをオーバーライドする代わりに、HTMLElementを拡張し、欠落していたプロパティを追加しました。
// Extend Document Typings
interface Document {
msExitFullscreen: any;
mozCancelFullScreen: any;
}
interface HTMLElement {
msRequestFullscreen(): void;
mozRequestFullScreen(): void;
}
感謝、私はちょうどあなたが投稿したときにそれを考え出した。実際には 'document.documentElement.requestFullscreen'を使用する必要があるようですが、あなたの答えは依然として型インタフェースに関する元の質問を解決するのに役立ちます。 – TetraDev
ええ、あなたの答えが更新されたことがわかりました。'HTMLElement'ではなく' Element'にメソッドを必ず追加してください。 –
私が拡張しようとしている型定義がもともと 'documentElement:HTMLElement'だったら' HTMLElement'ではなく 'Element'でなければならないのはなぜでしょうか?どちらかを使用するとコンパイルされるようです。 – TetraDev