제네릭(Generic)


function identity<T>(arg: T): T {
  return arg;
}

const num = identity<number>(42);
const str = identity<string>('hello');


function getArray<T>(items: T[]): T[] {
  return new Array().concat(items);
}

const numberArray = getArray<number>([1, 2, 3]);
const stringArray = getArray<string>(['a', 'b', 'c']);


interface Lengthwise {
  length: number;
}

function logLength<T extends Lengthwise>(arg: T): T {
  console.log(arg.length);
  return arg;
}

logLength('hello'); // 5
logLength([1, 2, 3]); // 3
// logLength(123); // 오류, 숫자는 length 속성 없음


Zustand


import create from 'zustand';

type BearState = {
  bears: number;
  increase: () => void;
};

const useStore = create<BearState>((set) => ({
  bears: 0,
  increase: () => set((state) => ({ bears: state.bears + 1 })),
}));

function BearCounter() {
  const bears = useStore((state) => state.bears);
  const increase = useStore((state) => state.increase);

  return (
    <div>
      <h1>{bears} 곰</h1>
      <button onClick={increase}>곰 추가</button>
    </div>
  );
}