React/TypeScript

React Typescript Interface Tuple Generic

arkhyeon 2024. 3. 25. 17:37
728x90
λ°˜μ‘ν˜•
πŸ’‘ 곡식 λ¬Έμ„œμ—μ„œ 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 νŒŒμΌμ—μ„œ μ œλ„€λ¦­μ„ μ‚¬μš©ν•  λ•Œ λ°œμƒν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 콀마λ₯Ό λΆ™μ΄λŠ” 것은 νŒŒμ„œμ—κ²Œ 이것이 μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜μž„μ„ λͺ…ν™•νžˆ ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•