에러의 사전 방지
function sum(a, b) {
return a + b;
}
sum(10, 20); // 30
sum('10', '20'); // 1020
function sumTs(a: number, b: number) {
return a + b;
}
sumTs('10', '20'); // Error: '10'은 number에 할당될 수 없습니다.
```
코드 가이드 및 자동 완성(개발 생산성 향상)
String Type
// 문자타입 - 타입추론 : 변수 선언시 사용한 타입으로 추론되어 다른 타입으로 재할당 시 오류발생
let a = '안녕하세요'
a = '반갑습니다'
a = 3 // 다른 타입을 넣게되면 에러 발생!
// 문자타입 - 타입명시
let b: string = '반갑습니다.'
b = '반가워요!!'
b = 10 // 숫자 타입 불가능!
// 타입 명시가 필요한 상황 : 추후 타입 변경 예상시 '|' 를 사용해 미리 명시해둠
let c: string | number = 1000
c = '1000원'
Nmber Type
let d: number = 10
d = "안녕하세요!!" // 문자 타입 불가능!
d = "33" // 문자 타입 불가능!
Boolean Type
let e: boolean = true
e = 11 // 숫자 타입 불가능!
e = false
// '' 안에 공백 포함 한글자라도 들어가게 되면 true로 인식하니 주의!
eee = "false" // true로 작동함
Array Type
// 아래 둘 중 하나로 사용 가능
let arr: number[] = [1,2,3]; // 1번
let arr: Array<number> = [1,2,3]; // 2번
// 배열타입
// 숫자
let f: number[] = [1, 2, 3, 4, 5]
f = ["철수", "영희", "훈이"] // 에러, 문자 타입 불가능!
// 문자
let g: string[] = ["철수", "영희", "훈이"]
// 숫자, 문자 혼합
let h: (number | string)[] = ["철수", "영희", "훈이", 10] // 타입을 추론해서 어떤 타입을 사용하는지 알아보기!!
let mymoney: number[] | string[] = [1000, 2000, 3000]
mymoney = ["1000원", "2000원", "3000원"]
Object Type
Object(객체)의 타입을 지정할 때는 interface를 사용
interface는 상호 간에 정의한 약속 혹은 규칙을 의미.
타입스크립트에서의 interface는 보통 아래 범주에 대해 약속을 정의함
// 타입 정의
interface IProfile {
name: string
// age: number // 1번
age: number | string // 2번
school: string
}
// 객체 생성
let profile: IProfile = {
name: '엘사',
age: 12,
school: "겨울왕국 초등학교"
}
profile.age = "13살" // 1번의 경우 에러, 2번의 경우 정상작동
profile.favoriteFood = '토마토스튜' // 타입을 정한게 없어 에러남 -> 아래의 코드 처럼 변경해야함
// 타입 정의
interface IProfile {
name: string
age: number | string
school: string
favoriteFood: string
}
// favoriteFood 를 쓸지 안쓸지 불명확하다면?
interface IProfile {
name: string
age: number | string
school: string
hobby?: string // ? 표시 해주면 됨
}
함수 타입에서는 매개변수 받는 위치에서 타입을 필수로 지정해줘야함
또한 실행도 지정해준 타입과 동일하게 작성해서 실행시켜야 함
return 값에 대한 타입도 지정해줄 수 있음 -> 매개변수 괄호 뒷 부분에서 타입 지정 가능
// 함수타입 1
// add(파라미터) ': number' -> 리턴타입 지정하는 코드
function add(num1: number, num1: number): number {
return num1 + num1
// return "안녕하세요!!" // return 값이 문자 타입이기에 불가능!
}
const result = add(1000, 2000)
// 함수타입 2
function add2(num1: number, num1: number, unit: string): string {
return num1 + num2 + unit
}
let result2 = add2(1000, 2000, "원") // result의 타입은 string이 되야함