내 코드에 대해 불평하지 않게 타이프 스크립트를 가져와야합니다. 그것은 브라우저에서 잘 실행되지만 전체 화면 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'.
내 타이프 클래스 적절한 무엇
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