React Typescript Interface Tuple Generic
π‘ 곡μ λ¬Έμμμ 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 νμΌμμ μ λ€λ¦μ μ¬μ©ν λ λ°μνλ λ¬Έμ μ λλ€. μ½€λ§λ₯Ό λΆμ΄λ κ²μ νμμκ² μ΄κ²μ΄ μ λ€λ¦ νμ λ§€κ°λ³μμμ λͺ νν νλ λ°©λ²μ λλ€.