TypeScript μ Interface μ¬μ©νκΈ°
πΈ TIL
TypeScript λ₯Ό μ¬μ©νκ² λλ©΄ ν¨μμ λ°ν κ°μ νμ μ μ§μ ν΄μ€ μ μλ€.
const func = async(foo: object): Promise<object> => {
try {
const res = await fetch(url, options);
return await res.json();
} catch (err) {
let errCode = {ok: false, data: err}
return errCode;
}
};
μμ κ°μ async await μ μ¬μ©ν λΉλκΈ° ν¨μκ° μλ€λ©΄ λ°ν κ°μ νμ μΌλ‘ Promise<object> λ₯Ό μ¬μ©νμ¬ νμ μ μ§μ ν΄μ€ μ μλλ°
λ°ν κ°μ νμ μ΄ νμ κ°μ μ μμ λκ° μλ€.
const func = async(foo: object): Promise<object | boolean> => {
try {
const res = await fetch(url, options);
return await res.json();
} catch (err) {
return false;
}
};
μμ μ½λλ λ°ν κ°μ΄ falseμΌ λκ° μκ³ κ°μ²΄μΌ λκ° μλλ° μ΄λ° κ²½μ° Promise<object | boolean> μΌλ‘ objectμ΄κ±°λ boolean μ μ§μ ν΄μ€μΌλ‘μ¨ λ κ°μ§ νμ μ μ§μ ν΄μ€ μ μλ€.
νμ§λ§ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ²λ¦¬νμ¬ λ°ννλ return κ°κ³Ό μλ²μμ λ°μμ¨ κ°μ΄λ λ€λ₯Έ μΈλΆ ν¨μμμ λ°μμ¨ κ°μ return νλ κ²½μ° κ°μ΄ μ¬λ¬κ°μΌ κ²½μ°κ° λ§μμ§λ©΄μ ν¨μμ λ°ν νμ μ μ¬λ¬κ° μ§μ νκ² λλ©΄ μ€λ₯κ° λ°μνκΈ° μ½λ€.
μ€μ λ‘ μ¬λ¬κ°μ νμ μ μ§μ ν΄μ£Όλ€λ³΄λκΉ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ΄ λ°μ΄ν°λ₯Ό μ¬μ©ν λ, λ°μ΄ν°λ₯Ό μ λ¬ν λ νμ μλ¬κ° λΉλ²νκ² μΌμ΄λμ μ½λ μμ±μ΄ λ²κ±°λ‘μμ§μ λκΌκ³ , νμ μ μ§μ ν΄μ£ΌμμΌλ κ·Έμ λ§μΆλ €κ³ μ΅μ§λ‘ λ³μμ λ΄κ±°λ, κ°μ²΄λ‘ λ§λ€κ±°λ λ±λ± λΆνμν λ°μ΄ν° λνμ λ§€λ² ν΄μ£Όμ΄μΌ νλ λΆνΈν¨μ λκΌλ€. μμ§ typescript μ¬μ©μ μμ΄μ λ₯μνμ§ λͺ»νκΈ° λλ¬Έμ΄λΌκ³ μκ°νλ€.
ν΄κ²°ν λ°©λ²μΌλ‘λ μλ²μμ λ°ννλ κ°μ νμ κ³Ό ν΄λΌμ΄μΈνΈμμ λ°ννλ νμ μ interfaceλ₯Ό μ¬μ©νμ¬ λ§μΆ°μ£Όλ λ°©λ²μ μ¬μ©νμλ€.
export interface OK {
ok: boolean;
data: any;
}
export const isOK = (data: string): OK => ({ ok: true, data });
export const isNotOK = (data: string): OK => ({ ok: false, data });
λ΄κ° μ§μ ν interface OK μ κ°μ΄ μλ²μμλ λλ €μ£Όλ κ°μ΄ OKμ κ°μ κ°μ²΄μμ μκ²λμκ³ μ΄ μ μ μμ©νμ¬ isOkμ isNotOk ν¨μλ₯Ό λ§λ€μ΄ μ±κ³΅ν λ°μ΄ν° κ°μ isOk ν¨μμ 맀κ°λ³μ dataμ λ£μ΄ λ€μ΄μ€λ λ°μ΄ν° κ°κ³Ό ok: trueλ₯Ό ν¬ν¨ν κ°μ²΄λ₯Ό 리ν΄νκ³ λ§μ°¬κ°μ§λ‘ μλ¬μΌ κ²½μ°μλ isNotOk ν¨μλ₯Ό μ¬μ©νμ¬ λ κ°μ²΄λ₯Ό 리ν΄ν μ μλλ‘ ν¨μλ₯Ό λ§λ€μ΄μ£Όμλ€.
μ΄ ν¨μμ λ°ν νμ μ intefface OKλ‘ μ§μ νμκΈ° λλ¬Έμ μλ²μ ν΅μ νλ μΈλΆ ν¨μλ€λ μ΄ OK νμ μ μ¬μ¬μ©ν μ μκ² λμκ³ ν¨μμ λ°ν νμ μ μ¬λ¬κ° μ§μ ν΄μ£Όμ§ μμ μ μκ² λμλ€.
λν μ΄ isOk, isNotOk ν¨μλ₯Ό λͺ¨λν ν¨μΌλ‘μ¨ μλ²μμ λ°νλλ κ°, ν΄λΌμ΄μΈνΈμμ μ²λ¦¬νμ¬ λ°ννλ κ°μ λ μ½κ² μμν μ μκ² λμ΄μ λλ²κΉ νκΈ° μ¬μμ‘κ³ , μΌκ΄μ±μλ μ½λ μμ±μ΄ κ°λ₯ν΄μ§λ©° μ½λμ κ°λ μ±λ μ’μμ‘λ€.
π λλ μ
μ¬μ€ TypeScriptλ₯Ό 곡λΆνλ©΄μ μμ λ€ μ μ§λ λͺ»νμ§λ§ Interfaceλ₯Ό μ μ¬μ©ν΄μΌνλμ§ μ λͺ°λλλ° μ’μ κ²½νμ ν μ μμλ€.
interface λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ λ°νμ μλ¬λ₯Ό λ§μ μ μμκ³ , λ΄κ° μ€μλ‘ λΈ μ€νλ λ€λ₯Έ κ°λ°μκ° μμ±ν μ½λλ₯Ό μμ ν΄μΌν λ μ³λ°λ₯Έ κ°μ μ£Όκ³ λ°μ μ μλ€λ μ μ΄ μ’μλ€.
( TypeScriptλ₯Ό μ¬μ©νλκΉ λκ° λ΄κ° μ½λλ₯Ό μ μ΄νλ λλ...? "λͺ¨λ μ½λμ μ μ΄λ λ΄κ° ν ν λ λλ λλ₯Ό λ―Ώκ³ μ½λλ₯Ό μ€νμν€κΈ°λ§ ν΄" μ΄λ° κΈ°λΆ....? )