๐ก ๊ณต์ ๋ฌธ์์์ Tuple ํ์ ์ Interface๊ฐ ์๋ Type์ผ๋ก ์ ์ธํ์ฌ ์ฌ์ฉ์ ์ถ์ฒํ์ง๋ง Interface๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ถ๊ธ์ ์ ํด์ํ๊ธฐ ์ํด ์์ฑํ๋ค.
* Tuple ํ์ ์ Type์ผ๋ก ์ ์ธํ์ฌ ์ฌ์ฉํ๊ธธ ๋ฐ๋๋๋ค.
Tuple์ Interface๊ฐ ์๋ Type์ผ๋ก ์ ์ธํด ์ฌ์ฉํ๋ ์ด์
์ธํฐํ์ด์ค(Interface)๋ ๊ฐ์ฒด ํ์ ์ ์ ์ ํน์ ์์, ํ์ฅํ์ฌ ์ฌ์ฉํ ์ ์์ด ์ฌ์ฉ์ ์ถ์ฒํ์ง๋ง ํ์ (Type)์ฒ๋ผ ์์ ํ์ ๋ฐ ํํ ํ์ ์ ์ ์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์๋์ ์ฌ์ฉ๋ฒ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ์ ํ ์ ์์ต๋๋ค.
Documentation - Advanced Types
Advanced concepts around types in TypeScript
www.typescriptlang.org
์ฌ์ฉ๋ฒ
ํด๋น Hook ์ฌ์ฉ ์ ์คํ๋ ๋ ์ฐ์ฐ์๋ก ์ฌ์ฉํ๊ธฐ ์ํด Array ํ์ ์ ํ์ฅํ์์ผ๋ฉฐ Generic Type ์ฌ์ฉ ์ <T,>๋ก ์ฌ์ฉํ๋ ๊ฒ์ Arrow Function์ด ์๋ ๊ธฐ์กด Function ํ์์ผ๋ก ์์ฑ ์ <T>๋ก ์์ฑ ํ ์ ์๋ค.
import React, {useState} from "react";
interface ReturnType<T> extends Array<T | ((e: React.ChangeEvent<HTMLInputElement>) => void)> {
0: T;
1: (e: React.ChangeEvent<HTMLInputElement>) => void;
}
const useInputs = <T,>(initial: T): ReturnType<T> => {
const [inputs, setInputs] = useState<T>(initial);
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
setInputs({ ...inputs, [name]: value });
}
return [inputs, onChange];
};
export default useInputs;
import useInputs from "./hook/useInputs.tsx";
interface StateType {
username: string,
email: string
}
const Inputs = () => {
const initState: StateType = {username: "", email: ""};
const [inputs, onChange] = useInputs(initState);
const {username, email} = inputs;
return (
<div>
<input type="text" name={"username"} value={username} onChange={onChange}/>
<input type="text" name={"email"} value={email} onChange={onChange}/>
</div>
);
};
export default Inputs;
<T,> ์ Arrow function Generic Type์ ์ฝค๋ง ์?
์ฝค๋ง๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ TypeScript์ ๋ฌธ๋ฒ๊ณผ parser์ ๋์ ๋ฐฉ์ ๋๋ฌธ์ ๋๋ค.
์ฝค๋ง๊ฐ ์์ผ๋ฉด, parser๋ ์ ๋ค๋ฆญ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๋ค๋ฅธ ๋ฌธ๋ฒ์ผ๋ก ํด์ํ๋ ค๊ณ ์๋ํ๊ณ , ์ด๋ก ์ธํด ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ ํนํ JSX ๋๋ TSX ํ์ผ์์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค. ์ฝค๋ง๋ฅผ ๋ถ์ด๋ ๊ฒ์ ํ์์๊ฒ ์ด๊ฒ์ด ์ ๋ค๋ฆญ ํ์ ๋งค๊ฐ๋ณ์์์ ๋ช ํํ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
'React > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React RichTextEditor Image Upload - reactQuill (0) | 2024.03.18 |
---|---|
React TypeScript useInfiniteQuery Infinite Scroll (0) | 2024.03.15 |
React TypeScript Zustand Infinite Scroll with IntersectionObserver (0) | 2024.03.14 |
React Axios TypeScript with JWT Boilerplate (0) | 2024.03.14 |
React TypeSciprt - Community Project (0) | 2024.03.13 |