-
ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค (Interface)โจ๏ธ conceptualization/Typescript 2022. 9. 9. 20:30728x90
๐ง ์ ๋ฒ์ฅ์ ์ ๋ณด์๋ ํ์ ์ด ๋ช ์๋ ํจ์ ๊ตฌ์กฐ
function aboutyelim(age: number): { myname: string; age: number; gender: string; hobby: string; married: boolean; } { return { myname: "yelim", age: 28, gender: "female", hobby: "playingguitar", married: false, }; }
๐ interface ๊ตฌ์กฐ๋ก ๋ฐ๊พธ์ด ์ฃผ์ !
- interface ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํด์ผํ๋ค. ๐ ๋ค๋ฅธ ์ธ์ด๋ค์ interface์ 'i' ๋ฅผ ๋ฐ์ 'I'๋ก ์์ํ๋ ๋ค์ด๋ฐ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด์ง๋ง typescript์์๋ 'I'๋ฅผ ๋ถ์ด์ง ์๋๊ฒ์ ์์น์ผ๋ก ํ๊ณ ์๋ค.
interface Aboutme { myname: string; age: number; gender: string; hobby: string; married: boolean; } function aboutyelim(age: number): Aboutme { return { myname: "yelim", age: 28, gender: "female", hobby: "playingguitar", married: false, }; }
Optional ๊ธฐํธ ๋ฌผ์ํ(?)๋ฅผ ์ฌ์ฉํ์ฌ missing error ํด๊ฒฐํ๊ธฐ
๋ง์ฝ return ๊ฐ์ค age ํ๋กํผํฐ ๊ฐ์ ์ ๊ฑฐํ๋ค๋ฉด ?
๐ ๋ค์๊ณผ ๊ฐ์ missing error๊ฐ ๋ฐ์๋๋ค.
๐ ๋ค์๊ณผ ๊ฐ์ ์ ํ์ ํ๋กํผํฐ(optional property) ์ฌ์ฉ์ผ๋ก ํด๊ฒฐ ํ ์ ์๋ค.
interface Aboutme { myname: string; age?: number; // ์ด์๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์์ด๋, ์์ด๋ ๋๋ ๊ฐ์ผ๋ก ๋ง๋ค์ด ๋ฒ๋ฆฌ์ gender: string; hobby: string; married: boolean; } function aboutyelim(age: number): Aboutme { return { myname: "yelim", gender: "female", hobby: "playingguitar", married: false, }; }
interface์ ์ต๋์ ๊ฐ์ -> ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ
interface Aboutme { myname: string; age: number; gender: string; hobby: string; married: boolean; } function aboutyelim(age: number): Aboutme { return { myname: "yelim", age: 28, gender: "female", hobby: "playingguitar", married: false, }; } // ๐ ์ ๋ณด๋ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์ธ์๊ฐ์ผ๋ก ๋ณด๋ด์ค๋ค const who = { myname: "yelim", age: 28, gender: "female", hobby: "playingguitar", married: false, }; // ๐ ํ๋ผ๋ฏธํฐ human์ ํ์ ์ Aboutme ๋ก ์ง์ ํจ์ผ๋ก์จ ์ง์ ๋ interface์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. function aboutyelim2(human: Aboutme): void {} aboutyelim2(who);
๋ฉ์๋๋ interface ์์์ ์ ์ํ ์ ์๋ค.
๐ ๋ฉ์๋๋ ?
๊ฐ์ฒด ๋ด์์ ์ ์๋ ํจ์๋ฅผ ๋งํ๋ค.
- ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด ๋ด์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
interface Aboutme { myname: string; age: number; gender: string; hobby: string; married: boolean; thisismethod?(comment: string): string; // thisismethod? : (comment : string) => string; }
thisismethod(comment: string): string; thisismethod : (comment : string) => string;
๐๐ป ์ด ๋๊ฐ๋ ํํ๋ฐฉ๋ฒ์ด ๋ค๋ฅด์ง๋ง ๊ฐ์ ๋ฉ์๋ ์ด๋ค.(ํน์ ๋ชจ๋ฅด๋ ์ค๋ฅ๋ฒ์๋ก optional ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์๋ค.)
interface์์ ์ฐ์ผ ์ ์๋ Read Only ์์ฑ
๐ Read Only ํ๋กํผํฐ๋ ์ฝ๊ธฐ ์ ์ฉ ํ๋กํผํฐ๋ก ๊ฐ์ฒด ์์ฑ์ ํ ๋น๋ ํ๋กํผํฐ์ ๊ฐ์ ๋ฐ๊ฟ์ ์๋ค !
interface Aboutme { readonly myname: string; //๐ ๋ค์๊ณผ ๊ฐ์ด myname ๋ถ๋ณ์ ์ธ ๊ฐ์ ์ํ๋ ํ๋กํผํฐ ์์ readonly๋ฅผ ๋ถ์ฌ์ฃผ์ ! age: number; gender: string; hobby: string; married: boolean; }
๐ ๋ง์ง๋ง์ผ๋ก..
- interface ๋ ์ฝ๋๊ฐ ๋ ๋๋ง ๋ ๋ ์๋ฌด๋ฐ ์ํฅ๋ ฅ์ด ์๋ค.(์ฆ, ์ปดํ์ผ๋ js ํ์ผ์์๋ ๋ณด์ด์ง x ) - interface ๋ ์์ฑ์ค์ธ ์ฝ๋์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํด์ ์กด์ฌํ๋๊ฒ !
๐ง ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์๋ก ํ์ ์คํฌ๋ฆฝํธ๋ ๋ ๋ง์ ๋์์ ์ค์ ์๋ค
(๋ ๋ง์ ์ค๋ฅ๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ)(์ฐธ๊ณ ์์) ๋ ์ฝฉ์ฝ๋ฉ : https://www.youtube.com/watch?v=jlzvXcDGZUU
'โจ๏ธ conceptualization > Typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Any, Union Type, Intersection Type, Type Aliases & Type Guards์ ๋ํด์ ์์๋ณด๊ธฐ (0) 2022.09.11 ์ด๊ฑฐํ(Enum) ๊ณผ ๋ฆฌํฐ๋ด ํ์ (0) 2022.09.11 ํ์ ๋ช ์ (Type Annotations) (0) 2022.09.09 ํ์ ์ถ๋ก (Type Inference) (2) 2022.09.09 Resct + TypeScript ์ค์ ํ๊ธฐ (0) 2022.07.08