๐ ๋น๊ตฌ์กฐ ํ ๋น ๋ฌธ๋ฒ์ type ์ ์ธํ๊ธฐ
์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด ๊ฐ์ฒด๋ ๋ฐฐ์ด๋ก ๋ ๋ณ์์ ๋น๊ตฌ์กฐํ ํ ๋น ๋ฌธ๋ฒ(destructuring assignment)์ ์ฌ์ฉํ ๋๊ฐ ์์ฃผ ์๋ค. typescript
๋ก ๋น๊ตฌ์กฐํํ ๋น ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ณ์๋ก ๊บผ๋ธ ๊ฐ์ ํ์
์ ์ ํด์ฃผ๋ ๊ฒฝ์ฐ๋ฅผ ๋ง์ฃผํ๋๋ฐ object
ํ์ ๊ฐ๋ ํ์
์ ์ด๋ป๊ฒ ์ ํด์ผ ํ๋์ง ํท๊ฐ๋ฆฌ๊ณค ํ๋ค. ์ด๋ฒ ๊ธ์ ๊ฑฐ์ฐฝํ ๊ธ๋ณด๋จ ๋ฏธ์ธ๋จผ์ง์ฒ๋ผ ์์ ํ์ด์ง๋ง ์ข
์ข
ํท๊ฐ๋ฆด ๋ ๋์์ด ๋๋ฏ๋ก ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ์ฝ์ด๋ณด์.
ํ๋จ ์ฝ๋๋ธ๋ก์ ๋์์๋ฏ์ด user
๋ฅผ ๊ตฌ์กฐ๋ถํดํ ๋น ์ดํ ํ์
์ ์๋ชป ์ ์ธํ๋ ๊ฒฝ์ฐ๋ AS-IS
์ฒ๋ผ ์ฌ์ฉํ๋ค. ํ์ง๋ง, ์ ๋ฌธ๋ฒ์ ํ์
์ ์ ํด์ฃผ๋ ๋ฌธ๋ฒ์ด ์๋๋ผ, ๊ฐ์ฒด์ ์๋ ์์ฑ๋ช
์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ํ ๋นํ๋ ๋ฌธ๋ฒ์ด๋ค. ์ฌ๊ธฐ์ string
์ผ๋ก ๋ฐ๊พผ๋ค๋ ์๋ฏธ๋ค. ๋ณธ๋ ์๋๋ผ๋ฉด TO-BE
์ฒ๋ผ ์ ์ธํด์ผ firstname
๊ณผ lastname
์ ํ์
์ ์ธ์ด ๋๋ค.
const user = { firstname: 'ted', lastname: 'an' }
const { firstname, lastname } = user;
// AS-IS
const { firstname: string, lastname: string } = user;
// TO-BE
const { firstname, lastname }: { firstname: string; lastname: string } = user;
์๋จ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ตณ์ด type casting
๋ฅผ ํ์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ํ์
์ ์ ์ฝ์ด๋ด๋๋ฐ, ๋ฌธ์ ๋ ๋ณดํต api
ํธ์ถ ์ดํ res
๊ฐ์ ๋ฐ์ ๋ ์ปดํ์ผ๋ฌ๊ฐ ํ์
์ ์ฝ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ด ๋ type assertion
์ ์ข
์ข
์ด์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ํ๋จ ์ฝ๋ ๋ธ๋ก 9๋ฒ ๋ผ์ธ์ ์ปดํ์ผ๋ฌ๊ฐ req.query
์ type
์ด ๋ช
ํํ์ง ์๋ค๊ณ ์๋ฌ๋ฅผ ๋ฟ๋ ๊ฒฝ์ฐ์ธ๋ฐ, ์ด๋ด ๋, ์๋ตํ๋ ๊ฐ์ด ๊ฐํ๊ฒ(key
๊ฐ + value
ํ์
์ ์๋ ๊ฒฝ์ฐ)์ ํด์ ธ์๋์ง, ์ฝํ๊ฒ(key
์ value
์ ํ์
๋ง ์๋๊ฒฝ์ฐ) ์ ํด์ ธ ์๋์ง ์ดํด๋ณธ๋ค.
์ด๋ฒ ๊ฒฝ์ฐ๋ query
๋ด๋ถ์ property
์ key
๊ฐ returnUrl
์ผ๋ก ์ ํด์ ธ์๊ณ , value
๊ฐ string
ํ์ผ๋ก ๊ณ ์ ๋์ด์๋ค๋ ์ ์ ์๊ณ ์์ด, TO-BE 2
์ฒ๋ผ type assertion
์ ์ ์ธํ๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์๋๋๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ ์์ ์ผ๋ก ํ์
์ ์ฝ์๋ค. ๋ง์ฝ, ๋์จํ๊ฒ ํ์
๋ง ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด TO-BE 1
, TO-BE 1-1
์ฒ๋ผ ์์ฑ ํ ์๋ ์๋ค๋ ์ ์ ์์๋์.
const res = {
query: {
returnUrl: '/auth-web/my-accounts',
},
...
}
// AS-IS
// ts2741: Property 'returnUrl' is missing in type '{ [key: string]: string | string[]; }' but required in type '{ returnUrl: string; }'.
const { returnUrl }: { returnUrl: string } = req.query
// TO-BE 1
const { returnUrl }: { [key: string]: string | string[] } = req.query
// TO-BE 1-1
type ReqQueryType = {
[key in string]: string | string[]
}
const { returnUrl }: ReqQueryType = req.query
// TO-BE 2
const { returnUrl } = req.query as { returnUrl: string }
Reference
๋๊ธ