πŸ“Typescript 둜 둜그인 κΈ°λŠ₯ κ΅¬ν˜„

10_2pangΒ·2023λ…„ 6μ›” 5일
0

βš½οΈνŠΈλŸ¬λΈ”μŠˆνŒ…

λͺ©λ‘ 보기
48/94
post-thumbnail

πŸ‘¨β€πŸ’»Β μ‚¬κ±΄


μ›ν‹°λ“œ μ˜¨λ³΄λ”© μ±Œλ¦°μ§€ κ³Όμ œμ—μ„œ 둜그인 κΈ°λŠ₯ κ΅¬ν˜„ 과제λ₯Ό μˆ˜ν–‰μ„ ν•˜μ˜€λ‹€. κ·Έ κ³Όμ •μ—μ„œ, νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 과제λ₯Ό κ΅¬ν˜„ν•˜λŠ”κ²ƒμ— 어렀움이 μžˆμ—ˆλ‹€.

βœ…Β ν•΄κ²°


ν•„μš”ν•œ interface λ₯Ό μ •λ¦¬ν•˜μ—¬ μ„€μ •ν•˜μ˜€λ‹€.

interface LoginResponse {
  message: LoginSuccessMessage | LoginFailMessage
  token: string
}

interface UserInfo {
  username: string
}

interface User {
  username: string,
  password: string,
  userInfo: UserInfo
}

λ‘œκ·ΈμΈμ‹œ, μ‘΄μž¬ν•˜λŠ” 계정을 νŒλ‹¨ν•˜κΈ° μœ„ν•΄ μž„μ˜λ‘œ 더미 데이터λ₯Ό μ„€μ •ν•˜μ˜€λ‹€.

const users: User[] = [
  {
    username: "blue",
    password: "1234",
    userInfo: { username: "blueStragglr" },
  },
  {
    username: "white",
    password: "1234",
    userInfo: { username: "whiteDwarf" },
  },
  {
    username: "red",
    password: "1234",
    userInfo: { username: "redGiant" },
  },
];

μœ„μ˜ νƒ€μž…μ •λ³΄μ™€ 더미데이터λ₯Ό ν™œμš©ν•˜μ—¬, 둜그인 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄ λ³΄μ•˜λ‹€.

const login = async (username: string, password: string): Promise<LoginResponse | null> => {
  // TODO: μ˜¬λ°”λ₯Έ username, passwordλ₯Ό μž…λ ₯ν•˜λ©΄ {message: 'SUCCESS', token: (μ›ν•˜λŠ” λ¬Έμžμ—΄)} λ₯Ό λ°˜ν™˜ν•˜μ„Έμš”.
  // user λΌλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€. κ·Έν›„ users λ³€μˆ˜μ— ν• λ‹Ήλœ 데이터듀을 νƒμƒ‰ν•˜μ—¬ 쑰건에 μ ν•©ν•œ 첫번째 인자λ₯Ό μ°ΎλŠ”λ‹€.
	// λ§Œμ•½ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ undefinde λ₯Ό λ¦¬ν„΄ν•œλ‹€.
  const user: User | undefined = users.find((user: User) => {
    // [users μ•ˆμ— 데이터 의 'username'μ΄λΌλŠ” ν‚€μ˜ κ°’] κ³Ό [login ν•¨μˆ˜μ—μ„œ 전달받은 νŒŒλΌλ―Έν„° 'username'] 의 값이 μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Όν•˜κ³ ,
		// [users μ•ˆμ— 데이터 의 'password'μ΄λΌλŠ” ν‚€μ˜ κ°’] κ³Ό [login ν•¨μˆ˜μ—μ„œ 전달받은 νŒŒλΌλ―Έν„° 'password'] 의 값이 μΌμΉ˜ν•˜λŠ” 경우 λ°˜ν™˜ν•œλ‹€.
    return user.username === username && user.password === password;
  });
  // user 이 μ‘΄μž¬ν•˜λ©΄ LoginResponse 객체의 { message: "SUCCESS", token: JSON.stringify({ username: user.userInfo }) } 객체 정보λ₯Ό λ¦¬ν„΄ν•˜κ³ ,
	// κ·Έλ ‡μ§€ μ•ŠλŠ”λ‹€λ©΄ null 을 λ°˜ν™˜ν•œλ‹€.
  return user ? { message: "SUCCESS", token: JSON.stringify({ username: user.userInfo }) } : null;
};

μ£Όν™©μƒ‰μœΌλ‘œ ν•˜μ΄λΌμ΄νŠΈ μΉ ν•œ 뢀뢄에 λŒ€ν•΄ μ •ν™•νžˆ 이해가 μ•ˆλ˜μ–΄, κ²€μƒ‰ν•˜μ—¬ κ³΅λΆ€ν•˜μ˜€λ‹€.

β†’ user λΌλŠ” λ³€μˆ˜λŠ” User 객체 νƒ€μž…μ„ κ°€μ§€κ±°λ‚˜, undefined λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. μœ„μ˜ κ²½μš°μ—λŠ”, find 쑰건을 톡해 κ±ΈλŸ¬μ§„ 값이 μ—†λ‹€λ©΄ undefined 값을 κ°€μ§ˆμˆ˜ μžˆκ²Œλ˜λŠ” 것이닀.

profile
μ£Όλ‹ˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œ 개발자 이광렬 μž…λ‹ˆλ‹€ 🌸

0개의 λŒ“κΈ€