1. Promise를 이용한 API 함수 타입 정의
function fetchItems(): Promise<string[]> {
let items: string[] = ['a', 'b', 'c'];
return new Promise((resolve) => resolve(items));
}
fetchItems();
- 동기적인 코드에서는 리턴값을 주지 않더라도 기본적으로 타입스크립트에서 타입추론이 가능함
- 비동기적인 코드에서는 new Promise를 반환하게 되면, Promise을 추론함
- 비동기 함수를 실행하는 시점에서 타입스크립트가 Promise 안에 들어오는 비동기 코드들에 대해 알 수 없음
- Promise는 기본적으로 제네릭을 이용해서 타입이 정의가 되어있음
- Promise를 리턴했을 때, Promise와 제네릭 타입을 함께 정의해주어야 함
2. enum을 이용한 타입 정의
interface PhoneNumberDictionary {
[phone: string]: {
num: number;
};
}
interface Contact {
name: string;
address: string;
phones: PhoneNumberDictionary;
}
enum Phonetype {
Home = 'home',
Office = 'office',
Studio = 'studio',
}
class AddressBook {
contacts: Contact[] = [];
constructor() {
this.fetchData();
}
fetchData(): void {
fetchContacts().then((response) => {
this.contacts = response;
});
}
findContactByPhone(phoneNumber: number, phoneType: Phonetype): Contact[] {
return this.contacts.filter((contact) => contact.phones[phoneType].num === phoneNumber);
}
}
const findPhoneTypeHome = new AddressBook().findContactByPhone(111, Phonetype.Home);
- 단순히 string 타입을 받을 때, 발생하는 오탈자를 방지하기 위해 변수화해서 타입을 제한
- 몇 개의 값에 대해서만 파라미터로 받을 때는 enum을 사용하기
- 왼쪽에는 이넘의 속성, 오른쪽에는 이넘의 값을 명시함
- string 대신에 제한된 문자열의 집합인 enum을 정의해주기
참고 : 타입스크립트 입문 - 기초부터 실전까지