Typescript에는 독특한 타입이 몇가지 있다.
unknown타입은 모든 값을 나타낸다고 할 수 있다. 처음엔 아무 타입도 가지고 있지 않다가 한번 더 확인(?)하는 것으로, typeof로 확실하게 정해준 다음에 작성해야한다. any랑 비슷하다고 생각할 수 있지만, any는 타입을 해제시키는 것이라서 아무거나가 가능하지만 unknown은 변수의 타입을 미리 알지 못하는 것뿐 새로 지정을 해줘야 한다는 것에 차이가 있다.
let a:unknown
if(typeof a === 'number'){
let b = a + 1
}
if(typeof a === 'string'){
let b = a.toUpperCase()
}
let b = a + 1//오류
아무것도 return하지 않는 함수를 대상으로 사용한다. 값을 반환하지 않는 함수의 반환 값을 나타내기 때문에 따로 지정해줄 필요는 없다.(함수에 return문이 없거나 해당 return문에서 명시적으로 값을 반환하기 않을 경우엔 유추가 가능하기 때문)
unction hello() {//hello():void (안써줘도 됨)
console.log('x')
}
const a = hello()
a.toUpperCase()//오류, void 타입엔 toUpperCase가 없음
함수가 "절대" return하지 않을 때 발생한다. 잘 쓰이지는 않음
일부 함수는 값을 반환하지 않습니다.
이는 함수가 예외(exception)를 throw하거나 프로그램 실행을 종료함을 의미합니다.
function hello():never {
throw new Error("zzz")//return하지 않고 오류를 발생시키는 함수이기에 이건 가능
return "a"//error
}
function temp(name:string|number):never {
if(typeof name === "string"){//string
name
} else if(typeof name === "number"){//number
name
} else { //위 조건문에서 두가지를 다 사용했기 때문에 else문에는 뭘 쓰든지 그 타입은 :never가 된다
name // 이 코드는 절대로 실행되지 않아야 한다.
}
}
if 안에서는 string형의 name 반환
else if 안에서는 number형의 name 반환
else 안에서는 never형의 name 반환
⇒ 즉, 제대로 인자가 전달되었다면 else로 올 수 없음
가장 많이 사용하는건 void, 그 다음엔 unkown이다. never는 거의 사용하지 않는다.
생각보다 타입스크립트에서 타입이 많다..
물론 쓰는것만 쓰겠지만, 그래도 전체적으로 타입에 대해서 정의하고 개념정리 할 수 있는 시간이었다.