์ฐ์ ๊ธฐ๋ก ๐ช
[Typescript] Cannot redeclare block-scoped variable ‘OOO’ ๋ณธ๋ฌธ
์ด์ ์ ์งํํ๋ ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง์ ์งํํ๋ฉฐ javascript๋ก ์์ฑํ๋ ํ์ผ์ ํ์ฅ์๋ฅผ ts๋ก ์์ ํ๋ค. ๊ทธ๋ฌ์ Cannot redeclare block-scoped variable ‘OOO’ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ตฌ๊ธ๋ง์ ํตํด ์ป์ ๊ฒฐ๋ก ์ “ํ์ ์คํฌ๋ฆฝํธ๋ ํ์ผ์ top-level์ import๋ export๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ํ์ผ์ ๋ชจ๋์ด ์๋ ์คํฌ๋ฆฝํธ ํ์ผ๋ก ์ธ์ํ๊ณ , ํ์ผ ๋ด์ ์ ์ธ๋ ๋ณ์๋ window, global๊ณผ ๊ฐ์ ์ ์ญ ์ค์ฝํ์ ์ํฅ์ ๋ฏธ์น๋ค.” ์ด๋ค.
์ฆ ์ฐ๋ฆฌ์ ํ์ฌ ์ฝ๋์๋ require๋ฌธ๋ง ์์ด์ ๋ณ์๊ฐ ์ ์ญ ์ค์ฝํ์ ์ํฅ์ ๋ฏธ์ณ ๊ฐ์ ์ด๋ฆ์ผ๋ก require๋ฅผ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ํ์ผ์ ๊ฐ์ฅ ์๋์ export {}; ๋ฅผ ์ถ๊ฐํด์ค์ ์ด ํ์ผ์ ๋ชจ๋์์ ๋ช ์์ ์ผ๋ก ์ ์ธํด ์ฃผ๋ฉด ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์๋ module.exports๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด๋ฅผ export๋ก ๋ฐ๊พธ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ ์ ์๋ค.
//before, test.js
module.exports = () => {
console.log('hihi');
};
//after, test.js
const printHi = () => {
console.log('hihi');
}
export { printHi }
//์์ ๊ฐ์ด ๋ฐ๊พธ๋ฉด require๋ฌธ๋ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ค์ผ ํ๋ค.
const printHi = require('test.js'); //์ด์
const { printHi } = require('test.ts'); //์ดํ
const { printHi : hihi } require('test.ts'); //๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๊ณ ์ถ์ ๊ฒฝ์ฐ
์ด์ ์๋ ๊ทธ๋ฅ module.exports๋ฅผ ํด์ฃผ์ด์ ์ด๋ค ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๋ ์๊ด์ด ์์์ง๋ง ์ด์ ๋ {}๋ก ๊ฐ์ธ์ export ํด์ฃผ์๊ธฐ ๋๋ฌธ์ printHi๋ผ๊ณ ํน์ ํด์ require๋ฅผ ํด์ผํ๋ค.