자바스크립트 코드
function preferTypeScript(person) {
return person.favoriteLanguages.includes('TypeScript');
}
타입스크립트 코드
type Language = 'TypeScript' | 'JavaScript' | 'Python' | 'Rust' | 'Haskell';
interface Person {
favoriteLanguages: Array<Language>;
}
function preferTypeScript(person: Person): boolean {
return person.favoriteLanguages.includes('TypeScript');
}
const areYouCool: boolean = true;
const answer: number = 42;
const typescript: string = "great";
const greetings: string = `
Hello, Readers!
Welcome to TypeScript.
`;
const hasType: Object = {
TypeScript: true,
JavaScript: false
};
function alwaysThrow(): never {
throw new Error(`I'm a wicked function!`);
}
// 원소 타입 뒤에 대괄호 []를 붙여 표현
const pibonacci: number[] = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
const myFavoriteBeers: string[] = ['Imperial Stout', 'India Pale Ale'];
const pibonacci: Array<number> = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
const myFavoriteBeers: Array<string> = ['Imperial Stout', 'India Pale Ale'];
튜플 타입을 이용해 원소의 수, 각 원소의 타입이 지정된 배열의 타입을 정의할 수 있다.
const nameAndHeight: [string, number] = ['조단비', 163]
튜플 타입 변수는 명시된 개수 만큼의 원소만 가질 수 있다. 정의 보다 더 많거나 더 적은 원소를 갖는 배열을 할당하면 에러가 발생한다.
// 에러 발생 예
const invalidNameAndHeight: [string, number] = ['조단비', 163, 3];
튜플 타입의 값을 Array 프로토타입의 메소드를 통해 조작하는 것이 가능하다. 그렇기 때문에 아래 코드에 에러가 발생하지 않는다.
const validNameAndHeight: [string, number] = ['조단비', 163];
validNameAndHeight.push(3);
자바스크립트의 오브젝트 리터럴을 정의 하듯이 중괄호 {}를 이용하여 객체 타입을 표현한다.
const user: { name: string; height: number; } = { name: '조단비', height: 163 };
이렇게 정의하는 객체 타입은 리터럴과 차이가 있다.
속성명 뒤에 물음표(?)를 붙여 사용하는데 해당 속성이 존재할 수도 있고, 존재하지 않을 수도 있을 때 사용한다.
const example: { text: string; number?: number; } = {
text: '타입스크립트'
};
속성명 앞에 readonly라는 키워드를 사용하여 해당 속성의 재할당을 막을 수 있다. readonly 키워드가 붙은 속성은 const 키워드를 이용한 변수 정의와 비슷하게 동작한다.
const text: {
readonly string: string;
number: numer;
} = { string: '타입스크립트', number: 1 };
text.string = '자바스크립트'; // 에러 발생
📌 실제 프로젝트에서 사용하며 알게된 정리
배열 / 객체 - 메모리를 가지는 경우가 다르고 각자의 장단점이 있다.
- 객체를 꼭 만들어야 하지 않는 경우라면, 배열로 만드는 것이 좋다.
- 프로젝트가 커지게 되면 객체를 만들 때 마다 인스턴스를 생성하기 때문이다.
- usecallback를 쓰지 않고 일반적인 함수라면 뷰에 작성 하지 않고 뷰모델에 작성 해주는 것이 좋다.
- reducer도 타입 지정 가능하다.