๋ช ๊ฐ์ ํ๋ก์ ํธ์์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ณ ๋์๋ถํฐ๋ ์ด์ ํ์ ์คํฌ๋ฆฝํธ ์ด์ ์ผ๋ก ๋์๊ฐ์ง ๋ชปํ๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋ ์ฒด๊ณ์ ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์จ์จ ๊ฒ ์๋๋ผ, ์ฐ๋ ํ์ ๋ง ์ฐ๊ณ , ๊ทธ๋ ๊ทธ๋ ์๋ฌ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ฉด์ ์ฒด๋ํ ๊ฒ์ธ์ง๋ผ ์๊ฐ์ด ๋๋ฉด ์ ์ ๋ฆฌ๋ ๋ฌธ์๋ค์ ์ฝ์ผ๋ฉด์, ๋ฌธ๋ฒ์ ์ตํ๋ ค๊ณ ํ๋ค.
React Native๋ฅผ ํ ๋ ๊ฐ์ฅ TS๋ฅผ ๋ง์ด ์ผ๋๋ฐ, ์ด๋๋ ๊ฑฐ์ interface
๋ก ์ ์ฒ ํ๋ค์ํผํ๋ค. type
๊ณผ interface
๊ฐ ๊ฑฐ์ ๋น์ทํ๋ค๋ ๊ฒ์ ์๊ณ ์์์ง๋ง, ๋ฑ ๊ฑฐ๊ธฐ๊น์ง์ด์ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํด๋ดค๋ค.
Interface
interface
๋ object
ํ์
์ ์ ์ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๋ฐ๋ user
๋ผ๋ ์ด๋ฆ์ ๊ฐ์ฒด ์ ๋ณด๊ฐ ์์ ๋ ์๋์ฒ๋ผ interface
๋ฅผ ์ ์ธํ ์ ์๋ค.
interface User {
name: string;
age: number;
}
๋ง์ผ, interface
์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ํ์ฅ์ ํ๊ณ ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ์จ์ผ ํ ๊น? ์์ ์ดํด๋ณธ ๊ธฐ๋ณธ user
ํํ๋ฅผ ์ด์ ํ์์ property
๋ฅผ ์ถ๊ฐํด 'ํ์'์ด๋ผ๋ interface
๋ฅผ ๋ง๋ค์ด๋ณด์.
interface User {
name: string;
age: number;
}
interface Student extends User {
major: string;
}
Type ๋๋ Type Aliases
type
๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์ด๋ค. ๋งค์ฐ ์ ์ฌํ ๊ฒ์ ์ ์ ์๋ค.
type User = {
name: string;
age: number;
}
๊ทธ๋ผ ์ด type
์ ๋ ํ์ฅํด์ ์ฐ๊ณ ์ ํ๋ค๋ฉด ์ด๋จ๊น?
type Student = User & {
major: string;
}
์ด๋ฐ ์์ผ๋ก &
์ฐ์ฐ์๋ฅผ ํตํด ํ์
์ ํ์ฅํด์ ์ด๋ค.
interface
์ type
์ ์ฐจ์ด์
์์ ๋ค๋ฃฌ ๊ฒ์ฒ๋ผ ๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ถ๊ฐํ๊ณ ์ถ์ property๊ฐ ์์ ๋ ์ด๋ป๊ฒ ์ถ๊ฐํ๋์ง์ ๋ํ ๋ฐฉ์์ ์๋ค. ๊ทธ๋์ ์ฌ๋ฌ ๋ฌธ์์์๋ ๋์ฒด๋ก ํ์ฅ ๊ฐ๋ฅ์ฑ์ด ์๋ interface
๋ฅผ ์ฐ๋ค๊ฐ, type
์ด ํ์ํ ๋ ์ด๋ฅผ ๋์
ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
Style Guide
์ฐธ๊ณ ๋ก type
๊ณผ interface
๋ชจ๋ UpperCamelCase
๋ฅผ ๊ถ๊ณ ํ๋ค.
์ถ์ฒ
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html