[TypeScript] Basic Types

유아현·2023년 3월 2일
0

TypeScript

목록 보기
2/3
post-thumbnail

📌 Primitive Types

  • 오브젝트, 레퍼런스 형태가 아닌 실제 값을 저장하는 자료형
  • 프리미티브 형의 내장 함수를 사용 가능한 것은 JS 처리 방식 덕분

✨ Primitive Types 종류

  • boolean
  • number
  • string
  • symbol (ES2015)
  • null
  • undefined

📌 Type Casing

  • Primitive Types은 모두 소문자
// 잘못된 예시
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); // 'expect result: boolean'

🔥 Number

  • Js와 같이 Ts 모든 숫자는 부동 소수점 값
  • Ts는 16진수 및 10진수 리터럴 외에도 ECMAScript 2015에 도입 된 2진수 및 8진수를 지원
  • NaN, 1_000_000과 같은 표기가 가능함
let decimal: number = 6;		// 10진수
let hex: number = 0xf00d;		// 16진수
let binary: number = 0b1010;	// 2진수
let octal: number = 0o744;		// 8진수
let notANumber: number = NaN;
let umderscoreNum: number = 1_000_000;

🔥 String

  • 다른 언어에서도 마찬가지로 텍스트 형식 참조를 위한 "string" 형식 사용
  • Js와 마찬가지로 문자열 데이터 둘러싸기 위해 큰 따옴표(")나, 작은 따옴표(') 사용
let myName: string = "GG";
myName = "OO";

/*
- 행에 걸쳐 있거나, 표현식을 넣을 수 있는 문자열
- backtick 기호에 둘러쌓여 있음
- 포함된 표현식은 `${expr}` 와 같은 형태로 사용
*/

const first: string = "Hello";
const second: string = "World";

console.log(`Oh! ${first}!! ${second}`) // expect result: Oh! Hello!! World

🔥 Symbol

  • new Symbol로 사용할 수 없음
  • Symbol을 함수로 사용해 symbol 타입을 만들어 낼 수 있음
console.log(Symbol('foo') ===Symbol('foo')) // expect result: false

/*
- 프리미티브 타입 값을 담아 사용
- 고유하고 수정불가능한 값으로 만듦
- 접근을 제어하는 데에 쓰이는 경우가 많음
*/

const sym = Symbol();
const obj = {
	[sym]: "value",
};

obj[sym] // 이런 식으로 접근

🔥 Null & Undefined

  • void와 마찬가지로 그 자체로는 그다지 유용하지 않음
  • 둘 다 소문자만 존재
/* 
- nul이라는 값으로 할당된 것을 null
- 무언가가 있는데 사용할 준비가 덜된 상태
- null 이라는 타입은 null이라는 값만 가질 수 있음
*/

let n: null = null;

console.log(n); // expect result: null
console.log(typeof n); // expect result: object

/* 
- 값을 할당하지 않은 변수는 undefined 값을 가짐
- 무언가가 아예 준비가 안 된 상태
*/

let n: undefined = undefined;

console.log(n); // expect result: undefined
console.log(typeof n); // expect result: undefined

🔥 Object

const person1: object = {name: "Mark", age: 39};

🔥 Array

const list: (number | string)[] = [1, 2, 3, "4"];


/*
다음과 같은 배열 형태에서 0번째는 숫자, 1번째는 문자와 같은 식으로 길이, 형식이 정해진 것이 필요하다면 튜플을 사용
*/

🔥 Tuple

const person: [string, number] = ["Mark", 39];

🔥 Any

function returnAny(msg): any {
console.log(msg);
}

const any1 = returnAny("리턴 아무거나")

// 어떤 타입이든 상관없음
// 근데 any는 쓰면 TS 쓰는 이점이 사라지기 때문에 지양할 것

🔥 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;	// XX
}

if(typeof maybe === 'string'){
  const aBoolean: boolean = maybe;	// XX
  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 // 보면 never라고 나옴
	// a가 string 타입이 아니라면 어떤 것을 할 수 없게... never 사용
}

🔥 Void

  • undefined만 void에 유일하게 할당 가능
function returnVoid(msg: string): void {
	console.log(msg)

  	return;
} // 이 상태에서 보면 이 함수는 void로 나옴


const r = returnVoid("리턴 없다!!"); // void로 나옴

0개의 댓글