Intro
ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๋์ค ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
Property 'offsetTop' does not exist on type 'Element'.ts(2339)
Why?
document.querySelector('.page').offsetTop
๋ค์์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ์ด ์ฝ๋๋ ๋ง๋ ์ฝ๋์ด์ง๋ง, ๊ฒฐ๊ณผ๊ฐ์ด null์ด ๋ ์ ์์ผ๋ฏ๋ก null ์ฒดํฌ๋ฅผ ํด์ค์ผ ํฉ๋๋ค.
๋๋ฒ์งธ๋ก๋, ํ์ฌ ๋ฆฌํด ํ์ ์ Element์ ๋๋ค. ํ์ง๋ง Element๋ offsetTop์ด๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ๊ณ ์์ง ์์ต๋๋ค. HtmlElement๋ก ๋ฐํ๋ ๊ฒ์ด๋ผ๊ณ ์์ํ ์ ์์ง๋ง, SVGElement๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ์๊ฒ๋ ์ด ์ ๋ณด๊ฐ ์ ํํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋ถ๋ถ ์ญ์ type-assertion์ ํตํด ์์ ํด์ค์ผ ํฉ๋๋ค. ํน์ ๋ฐํ์ ์ค ์ฒดํฌ๋ฅผ ํ์ ๋ ๋ฉ๋๋ค.
How to solve the problem
null-check
const element = document.querySelector('.page');
if (element !== null) { ... }
type-assertion
element as HTMLElement
runtime-check
if (element instanceof HTMLElement) {}