unknown (최대한 사용을 지양)💩
값의 타입이 무엇인지 모를때, 즉 아무런 타입이 와도 상관없음
let notSure: unknown = 33
notSure = "hello";
notSure = true;
//위의 할당 모두 가능하다. 어떤 데이터 타입도 할당 가능하게 하니 타입스크립트와 어긋나는 개념
📍 그럼 왜 있을까?
타입스크립트는 타입이 없는 자바스크립트와 연동이 되기 때문이다. 만약 자바스크립트 라이브러리를 사용할때 그 리턴값을 모를 수 있다. 그때 사용되지만 최대한 그 값을 알아서 타입을 지정하는 방향으로 코딩을 해야한다.
any (최대한 사용을 지양)💩
아무 데이터 타입이나 다 쓸 수 있다. Anything!
let anything: any = 6;
anything = "Joah";
anything = false;
//위의 할당 모두 가능하기 때문에 최대한 사용을 지양한다.
void
함수에서 아무런 값을 리턴하지 않을 때 사용된다.
function simplyPrint(): void{
console.log("Hello World")
}
//단순히 출력만 하고 어떤 값도 리턴하지 않기 때문에 void를 사용한다.
//이럴때 void를 생략할 수 있다.
let unusual: void = undefined; => 💩
//변수에 void를 할당할 시 undefined만 할당할 수 있기 때문에 사용하지 않는다.
never
함수에서 값이 절대 리턴되지 않는 경우. 주로 에러문을 던질때 사용된다.
function throwError(): never{
//서버에 에러가 났다고 log를 보내고 message -> server(log)
throw new Error(message);
//사용자에게 에러 메세지를 띄운다.
}
let neverEver: never; => 💩
//이런식으로 절대 쓰이지 않는다. 변수를 절대 리턴하지 않는다? 벌써 말도 안됨
object (사용을 지양하며 어떤 obj 타입인지 정확히 명시) 💩
object에는 원시형 타입인 primitive type 제외하고 모든 객체형 데이터가 포함된다.
let obj: object = [1,3,4];
function anyObject(obj: object){};
anyObject({name: "Joah"});
anyObject(["dog", "cat", "cow"]);
위와 같이 어떤 타입의 object 즉 배열, 객체, 함수 모두 할당 가능하기 때문에 이것 또한 정확한 타입을 지정하는 것이 아니다.
따라서 사용하기 위해서는 object의 value가 어떤 타입을 가지는지, 배열의 요소가 어떤 타입인지 작성하는게 맞다.