๊ธฐ์กด ํ์ ์ ์กฐ์ํด์ ํ์ํ ํ์ ๋ง ๋ฐ๋ก ๋นผ๋๊ฑฐ๋, ํ์์๋ ํ์ ๋ง ์ ๊ฑฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ง์ด ์ฌ์ฉ๋๋ ์ ํธ๋ฆฌํฐ ํ์ ์ ๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
export interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
// 1. Partial ํ์
: ์ ์ฒด ๋ฌผ์ํ ๋ถ์ฌ์ฃผ๊ธฐ
type aaa = Partial<IProfile>;
// 2. Required ํ์
: ์ ์ฒด ๋ฌผ์ํ ์ญ์
type bbb = Required<IProfile>;
// 3. Pick ํ์
: ํน์ ๊ฐ ๊ณ ๋ฅด๊ธฐ
type ccc = Pick<IProfile, "name" | "age">;
// 4. Omit ํ์
: ํน์ ๊ฐ ๋นผ๊ธฐ
type ddd = Omit<IProfile, "school">;
// 5. Record ํ์
: ๊ฐ๋ณ record์ ๋ด๊ฐ ์ํ๋ ๊ฒ ์ง์ .
type eee = "์ฒ ์" | "์ํฌ" | "ํ์ด";
// Union ํ์
: string ํ์
๋ณด๋ค ๋ ์๊ฒฉํจ.
let child1: eee = "์ฒ ์";
// ์ฒ ์, ์ํฌ, ํ์ด๋ง ๋จ.
let child2: string = "์ฌ๊ณผ";
// ์ฒ ์, ์ํฌ, ํ์ด, ์ฌ๊ณผ, ๋ฐ๋๋ ๋ฑ๋ฑ ๋ค ๋จ.
type fff = Record<eee, IProfile>;
// ์ฒ ์, ์ํฌ, ํ์ด์ ๊ฐ๊ฐ IProfile ๋งตํ
// 6. ๊ฐ์ฒด์ key๋ค๋ก Union ํ์
๋ง๋ค๊ธฐ
type ggg = keyof IProfile;
// "name" | "age" | "school" | "hobby" ๋ง๋ค์ด์ง.
let myprofile: ggg = "hobby";
// 7. type vs interface ์ฐจ์ด => interface๋ ์ ์ธ๋ณํฉ ๊ฐ๋ฅ(๋ ๊ฐ์ ์ธํฐํ์ด์ค ํฉ์ฒด ๊ฐ๋ฅ)
export interface IProfile {
candy: number; // ์ ์ธ๋ณํฉ์ผ๋ก ์ถ๊ฐ๋จ.
}
// 8. ๋ฐฐ์ด ๊ฒ ์์ฉ
let profile: Partial<IProfile> = {
candy: 10,
};
rest-api๋ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฉํ๋ฉด ์ผ์ผ์ด ์์ผ๋ก ๋ง๋ค์ด ์ค์ผ ํ๋ ๋ถ๋ถ์ด ๋ง๋ค. graphql-api ๊ฐ์ ๊ฒฝ์ฐ graphql-codegen
์ ์ด์ฉํด ๋ช
๋ น์ด ํ๋๋ก ๋ง๋ค์ด์ค๋ค. ๋ฐ๋ผ์ ๊ต์ฅํ ๊ฐํธํ๊ฒ ๋ง๋ค ์ ์๋ค.
์ค์น์ ์ค์ ์ ์๋ฃํ๊ณ , yarn generate ๋ช
๋ น์ ์คํํ๋ฉด, ๋ฐฑ์๋ ์ปดํจํฐ์ ์ ์ํด์ graphql-api
๋ก ๋ฐ์์ค๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ์
์ ๋น ๋ฅด๊ฒ ์กฐ์ฌํ๊ณ , ์ด์ ์ผ์นํ๋ ํ์
์คํฌ๋ฆฝํธ ํ์ผ์ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
const [ํจ์] = useMutation<๊ฒฐ๊ณผํ์
,๋ณ์ํ์
>(์ฟผ๋ฆฌ);
// types.ts ํ์ผ์์ ๋ค์ด๋ก๋๋ ํ์
๋ค ์ค ํด๋น ํ์
์ importํด์์ผ ํจ
import {
IMutation,
IMutationCreateBoardArgs,
} from "../../../src/commons/types/generated/types";
// <>๋ฅผ ์ด์ฉํด์ ํ์
์ ์ง์
// ํ์
ํ์ผ์์ IMutation ์ค createBoard๋ฅผ pick, IMutationCreateBoardArgs๋ฅผ import
export default function GraphqlMutationPage() {
const [๋์ํจ์] = useMutation<
Pick<IMutation, "createBoard">,
IMutationCreateBoardArgs
>(๋์๊ทธ๋ํํ์์
ํ
)
query
์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ๋ mutation๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
import {
IQuery,
IQueryFetchBoardArgs,
} from "../../../src/commons/types/generated/types";
const { data } = useQuery<Pick<IQuery,"fetchBoard">,IQueryFetchBoardArgs>(FETCH_BOARD,{
variables: {number: Number(router.query.mynumber)}
})
์ค๋์ ์ ํธ๋ฆฌํฐ ํ์
๊ณผ graphql api์ ํ์
์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๋ค. ํ์
์คํฌ๋ฆฝํธ
๋ฅผ ์ฐ๊ธฐ ์์ํ๋ฉด์, ๋ณ์์ ํ์
์ ์ผ์ผ์ด ์ง์ ํด์ฃผ๋ ๊ฒ ๋ฒ๊ฑฐ๋กญ๊ธด ํ์ง๋ง, ๋์ค์ ๋ฐ์ํ ์ ์๋ ์๋ฌ๋ฅผ ๊ณ ๋ คํ๋ฉด ๊ผญ ํ์ํ ๊ฒ ๊ฐ๋ค. ์ง๊ธ๊น์ง ๋ง๋ค์ด๋์ js ํ์ผ์ ts/tsx๋ก ๋ฐ๊ฟ๋ณด๋ฉด์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๋ ์ฐ์ต์ ํด์ผ๊ฒ ๋ค!