DH의 개발 공부로그
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #2 - Canvas 활용하기 본문
TypeScript
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #2 - Canvas 활용하기
DeveloperDH 2023. 2. 23. 22:05728x90
Canvas 사용하기
// 기존 코드
class Game {
constructor() {
this.canvas = document.querySelector("canvas");
this.ctx = this.canvas.getContext("2d");
this.canvas.width = 500;
this.canvas.height = window.innerHeight;
}
}
class Game {
public canvas: HTMLCanvasElement;
public ctx: CanvasRenderingContext2D;
constructor() {
this.canvas = document.querySelector("canvas") as HTMLCanvasElement;
this.ctx = this.canvas.getContext("2d");
this.canvas.width = 500;
this.canvas.height = window.innerHeight;
}
}
작동은 되지만 this.ctx
에서 오류가 발생하게 되었습니다.
오류의 내용은
Type 'CanvasRenderingContext2D | null' is not assignable to type 'CanvasRenderingContext2D'.
Type 'null' is not assignable to type 'CanvasRenderingContext2D'.
즉, this.ctx
의 타입이 null
일수도 있기 때문에 'CanvasRenderingContext2D' 유형에 할당할 수 없다라는 오류였습니다.
그래서 ctsRes라는 변수를 만들어 null
이 아닌 경우를 판별하는 한번의 안전장치를 추가해주는 것으로 문제를 해결했습니다.
class Game {
public canvas: HTMLCanvasElement;
public ctx: CanvasRenderingContext2D;
constructor() {
this.canvas = document.querySelector("canvas") as HTMLCanvasElement;
const ctsRes = this.canvas.getContext("2d");
if (!ctsRes || !(ctsRes instanceof CanvasRenderingContext2D)) {
throw new Error('Failed to get 2D context');
}
this.ctx = ctsRes;
this.canvas.width = 500;
this.canvas.height = window.innerHeight;
this.start();
}
}
참고
React TypeScript: Type 'null' is not assignable to type 'CanvasRenderingContext2D'
728x90
'TypeScript' 카테고리의 다른 글
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #4 - 이미지 부분 변환하기! (0) | 2023.02.24 |
---|---|
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #3 - start() & SpaceShip (0) | 2023.02.23 |
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #1 (0) | 2023.02.22 |
[TypeScript] 타입스크립트 인터페이스 - Interface (0) | 2023.02.10 |
[TypeScript] 타입스크립트 클래스 - Classes (0) | 2023.02.09 |
Comments