TypeScript는 JavaScript의 상위 집합임
Migration
할 수 있음모든 TypeScript는 JavaScript가 아님
// TypeScript
function greet(who: string) {
console.log('Hello, who);
}
// JavaScript
// Syntax Error: Unexpected token :
function greet(who: string) {
console.log('Hello, who);
}
TypeScript는 정적
타입 시스템임
TypeScript는 타입 구문 없이도 오류를 잡을 수 있지만, 타입 구문을 추가하면 훨씬 더 많은 오류를 잡을 수 있음
의도
가 무엇인지 타입 구문을 통해 알려줄 수 있음// bad
const states = [
{name: 's', froit: 'apple'},
{name: 'milli', froit: 'banana'},
{name: 'muffin', froit: 'lemon'},
]
for (const state of states) {
// Error : 'state'에 'fruit' 속성이 없습니다.
console.log(state.fruit);
}
// good
interface State {
name: string;
fruit: string;
}
const states: State[] = [
// Error: 'state'에 'froit' 속성이 없습니다.
{name: 's', froit: 'apple'},
{name: 'milli', froit: 'banana'},
{name: 'muffin', froit: 'lemon'},
]
const x = '2' + 3; // 정상, string 타입
const x = 2 + '3'; // 정상, string 타입
const a = null + 7;
// a = 7 in JS
// Error : + 연산자를 ... 형식에 적용할 수 없음 in TS
const b = [] + 12;
// b = 12 in JS
// Error : + 연산자를 ... 형식에 적용할 수 없음 in TS
alert('Hello', 'TypeScript');
// 'Hello' 경고를 표시함 in JS
// Error: 0 ~ 1개의 인수가 필요한데 2개를 가져옴
const names = ['s', 'milli', 'muffin'];
console.log(names[3].toUpperCase());
// TypeError: Cannot read property 'toUpperCase' of undefined
TypeScript 설정은 커맨드 라인을 이용하기보다는 tsconfig.json
을 사용하는 것이 좋음
TypeScript 컴파일러는 언어의 핵심 요소에 영향을 미치는 몇 가지 설정을 포함하고 있음
noImplicitAny
와 strictNullCheck
를 이해해야함// noImplicitAny : false
function add(a, b) {
// a 매개변수에 암시적으로 any 형식이 포함됨
// b 매개변수에 암시적으로 any 형식이 포함됨
return a + b;
}
// noImplicitAny : true
// Error
function add(a, b) {
return a + b;
}
// noImplicitAny : true
function add(a: any, b:any) {
return a + b;
}
function add(a: number, b:number) {
return a + b;
}
noImplicitAny를 설정하여 코드를 작성할 때 장점
JavaScript로 되어 있는 기존 프로젝트를 TypeScript로 전환하는 상황에만 noImplicitAny 설정을 해제하는 것이 좋음
// strictNullChecks : false
const x: number = null; // 정상, null은 유효한 값임
const x: number = undefined; // 정상, undefined은 유효한 값임
// strictNullChecks : true
const x: number = null; // Error: null 형식은 number 형식을 할당할 수 없음
const x: number = undefined; // Error: undefined 형식은 number 형식을 할당할 수 없음
strictNullChecks는 null과 undefined 관련된 오류를 잡아내는 데 많은 도움이 됨
strictNullChecks를 설정하려면 noImplicitAny를 먼저 설정해야함
언어에 의미적으로 영향을 미치는 설정들(noImplicitThis, strictFunctionTypes, noImplicitAny, strictNullChecks 등)를 모두 설정하고 싶다면 strict 설정을 하면 됨