📌 Primitive Types
- 오브젝트, 레퍼런스 형태가 아닌 실제 값을 저장하는 자료형
- 프리미티브 형의 내장 함수를 사용 가능한 것은 JS 처리 방식 덕분
✨ Primitive Types 종류
- boolean
- number
- string
- symbol (ES2015)
- null
- undefined
📌 Type Casing
function reverse(s: String): String {
return s.split("").reverse().join("");
}
reverse("hello world")
function reverse(s: string): string {
return s.split("").reverse().join("");
}
reverse("hello world")
🔥 Boolean
let isDone: boolean = false;
isDone = true;
console.log(typeof isDone);
🔥 Number
- Js와 같이 Ts 모든 숫자는 부동 소수점 값
- Ts는 16진수 및 10진수 리터럴 외에도 ECMAScript 2015에 도입 된 2진수 및 8진수를 지원
- NaN, 1_000_000과 같은 표기가 가능함
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let notANumber: number = NaN;
let umderscoreNum: number = 1_000_000;
🔥 String
- 다른 언어에서도 마찬가지로 텍스트 형식 참조를 위한 "string" 형식 사용
- Js와 마찬가지로 문자열 데이터 둘러싸기 위해 큰 따옴표(")나, 작은 따옴표(') 사용
let myName: string = "GG";
myName = "OO";
const first: string = "Hello";
const second: string = "World";
console.log(`Oh! ${first}!! ${second}`)
🔥 Symbol
- new Symbol로 사용할 수 없음
- Symbol을 함수로 사용해 symbol 타입을 만들어 낼 수 있음
console.log(Symbol('foo') ===Symbol('foo'))
const sym = Symbol();
const obj = {
[sym]: "value",
};
obj[sym]
🔥 Null & Undefined
- void와 마찬가지로 그 자체로는 그다지 유용하지 않음
- 둘 다 소문자만 존재
let n: null = null;
console.log(n);
console.log(typeof n);
let n: undefined = undefined;
console.log(n);
console.log(typeof n);
🔥 Object
const person1: object = {name: "Mark", age: 39};
🔥 Array
const list: (number | string)[] = [1, 2, 3, "4"];
🔥 Tuple
const person: [string, number] = ["Mark", 39];
🔥 Any
function returnAny(msg): any {
console.log(msg);
}
const any1 = returnAny("리턴 아무거나")
🔥 Unknown
- any와 짝으로 any보다 Type-safe한 타입
- any와 같이 아무거나 할당할 수 있음
- 컴파일러가 타입을 추론할 수 있게끔 타입의 유형을 좁히거나
- 타입을 확정해 주지 않으면 다른 곳에 할당할 수 없고, 사용할 수 없음
declare const maybe: unknown;
const aNumber: number = maybe;
if(maybe === true) {
const aBoolean: boolean = maybe;
const aString: string = maybe;
}
if(typeof maybe === 'string'){
const aBoolean: boolean = maybe;
const aString: string = maybe;
}
🔥 Never
- 모든 타입의 subtype, 모든 타입에 할당 가능
- never에는 어떤 것도 할당할 수 없음 (never인 것에는 무엇도 할당할 수가 없다는 뜻)
- any 조차도 never에게 할당 불가
function error(msg: string): never {
throw new Error(msg);
}
function fail() {
return error("failed")
}
function infiniteLoop(): never {
while (1){
}
}
let a: string = 'gg';
if (typeof a !== 'string') {
a
}
🔥 Void
- undefined만 void에 유일하게 할당 가능
function returnVoid(msg: string): void {
console.log(msg)
return;
}
const r = returnVoid("리턴 없다!!");