작성자와 사용자의 관점으로 코드 바라보기 타입이란 해당 변수가 할 수 있는 일을 결정한다
1 2 3 4 5 6 7 8 9 10 11 12 13 function f1 (a ){ return a } function f1 (a ){ return a * 38 } console .log (f2 (10 )) console .log (f2 ('Mark' ))
타입스크립트의 추론에 의지하는 경우
1 2 3 4 5 6 7 8 9 10 function f3 (a ){ return a * 38 } console .log (f3 (10 )) console .log (f3 ('Mark' ))
nolmplicitAny 옵션 타입을 명시적으로 지정하지 않은경우, 타입스크립트가 추론 중 ‘any’라고 판단하게 되면, 컴파일 에러를 발생시켜 명시적으로 지정하도록 유도한다
noImplicitAny 에 의한 방어 1 2 3 4 5 6 7 8 9 function f3 (a ){ return a * 38 ; } console .lof (f3 (10 ))console .log (f3 ('Mark' ) + 5 )
number타입으로 추론된 리턴 타입
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function f4 (a: number ){ if (a>0 ){ return a * 38 } } console .log (f4 (5 )) console .log (f4 (-5 ) + 5 )
strictNullChecks 옵션
모든 타입에 자동으로 포함되어 있는 ‘null’과 ‘undefined’를 제거해준다
number | undefined 타입으로 추론된 리턴 타입 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function f4 (a: number ){ if (a>0 ){ return a * 38 ; } } console .log (f4 (5 ))console .log (f4 (-5 ) + 5 )
명시적으로 리턴타입을 지정해야 할까?
1 2 3 4 5 6 7 8 9 function f5 (a: number ): number { if ( a > 0 ){ return a * 38 } }
noImplicitReturns 옵션을 켜면
함수내에서 모든 코드가 값을 리턴하지 않으면, 컴파일 에러를 발생 시킨다
1 2 3 4 5 6 7 8 function f5 (a: number ){ if ( a > 0 ){ return a * 38 ; } }
매개변수에 object가 들어오는 경우 1 2 3 4 5 6 7 8 function f6 (a ){ return `이름은 ${a.name} 이고, 연령대는 ${Math .floor(a.age / 10 ) * 10 } 대 입니다.` } console .log (f6 ({name : 'Mark' , age : 38 })) console .log (f6 ('Mark' ))
object literal type 1 2 3 4 5 function f7 (a: {name: string; age: number} ): string { return `이름은 ${a.name} 이고, 연령대는 ${Math .floor(a.age / 10 ) * 10 } 대 입니다.` } console .log (f7 ({name :'Mark' , age :38 })) console .log (f7 ('Mark' ))
매번 이렇게 오브젝트의 타입을 지정해주는건 힘들기 때문에 나만의 타입을 만들 수 있다
나만의 타입을 만드는 방법 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 interface PersonInterface { name : string age : number } type PersonTypeAlias = { name : string; age : number; } function f8 (a: PersonInterface ): string { return `이름은 ${a.name} 이고, 연령대는 ${Math .floor(a.age/10 ) * 10 } 대 입니다.` } console .log (f8 ({name :'Mark' , age : 38 })) console .log (f8 ('Mark' ))
타입스크립트 코드를 작성하는 사람으로서 어떻게 타입을 표현할 수 있는지가 중요