μν°λ μ¨λ³΄λ© μ±λ¦°μ§ κ³Όμ μμ λ‘κ·ΈμΈ κΈ°λ₯ ꡬν κ³Όμ λ₯Ό μνμ νμλ€. κ·Έ κ³Όμ μμ, νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ κ³Όμ λ₯Ό ꡬννλκ²μ μ΄λ €μμ΄ μμλ€.
νμν 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 κ°μ κ°μ§μ μκ²λλ κ²μ΄λ€.