[TypeScript] 타입(Type)

Philip Sung·2023년 7월 31일
0
post-thumbnail

01 개요

타입스크립트에서 이야기하는 타입은 값(data)과 해당 값에 대해 적용할 수 있는 동작의 집합을 말한다. 타입스크립트의 주요한 개념 중 하나인 타입에 대한 내용을 다룬다.

최종수정일 : 2023.08.02



02 타입 종류(기본형)

02.01 any

모든 값과 모든 동작의 할당을 허용한다. 명시적으로 선언하였을 때 예외가 발생하지 않는다.

02.02 unknown

타입이 정제(refine)되게 전까지 값을 사용할 수 없게 한다.

02.03 boolean

: boolean 타입의 값인 true, false 등의 값을 갖는다.
동작 : ==, ===, ||, &&, ?, ! 등의 연산이 가능하다.

02.04 number

: 2^53 크기까지의 정수 또는 소수, 양수, 음수, Infinity, NaN 등의 값을 갖는다.
동작 : +, -, %, <, > 등의 연산이 가능하다.

02.05 bigint

: number에 비해 큰 수의 정수를 표현할 수 있다.
동작 : +,-, %, <, > 등의 연산이 가능하다.

02.06 string

: 2^53-1 크기의 문자열을 저장할 수 있다.
동작 : +(concat), .slice 등의 동작이 가능하다.

02.07 symbol

키 값등으로 쓰이는 타입으로 추론되나, 쓸모가 다양하지 않다고 한다.
정확한 확인 및 설명은 보류한다.

02.08 object

02.08.01 object 타입 선언 방법

  • 객체 리터럴
  • 빈 객체 리터럴({}) : null과 undefined를 제외한 모든 타입을 할당 가능
  • object 타입 : TypeScript의 오브젝트 타입으로, 자바스크립트 객체라는 사실을 명시한다.
  • Object 타입 : 자바스크립트의 Object 객체와 동일하며, 빈 객체 리터럴과 비슷하다.

02.08.02 object 타입의 프로퍼티

객체는 프로퍼티를 갖는다. 이 때 타입스크립트에서는 객체를 다음과 같은 방식으로 서술할 수 있다.

let SampleObject: {
	propertyA: string,
	propertyB?: number,
	readonly propertyC: number,
	[key: number]: boolean,
} = {
	propertyA: 'myProperty',
	propertyB: 100,
	1: true,
	13:false
}

서술된 프로퍼티만을 가질 수 있으며, 위에 서술된 프로퍼티의 속성은 다음과 같다.

propertyA
SampleObject 타입의 객체는 string 타입의 프로퍼티 propertyA를 갖는다.

propertyB
SampleObject 타입의 객체는 number 타입의 프로퍼티를 propertyB를 갖거나, 이 프로퍼티를 생략할 수 있다.

propertyC
SampleObject 타입의 객체는, 초기 할당된 프로퍼티 값이 변동되지 않고 읽기 전용인 propertyC를 갖는다.

[key: number]: boolean
SampleObject 타입의 객체는, number타입인 프로퍼티 키 key와, boolean 타입의 값을 가지는 프로퍼티를 여러개 포함할 수 있다.

02.09 null

: null
값이 없음을 의미한다(무).

02.10 undefined

: undefined
자료형이 정의되지 않았음을 의미한다(값은 존재하나, 구조/해석방법이 존재하지 않음).

02.11 void

function a() { let a = 1+1; }
console.log("noReturn");
명시적으로 아무것도 반환하지 않는 함수의 반환

02.12 never

function a() { throw TypeError('Always throw error'); }
function b() { while(true) { SampleFunction(); }
절대 반환하지 않는, 예외를 던지거나 영원히 실행되는 함수 타입을 가리킨다.




03 타입 종류(특수형)

(아래 리스트를 참조하여 재작성_230801)

03.00 타입 별칭

type Count = number

사용자 정의 타입을 생성한다. 타입 별칭은 블록 영역에서 생성된다.

03.01 union type & intersection type

type Cat = {name: string, purrs: boolean}
type Dog = {name: string, barks: boolean, wags: boolean}
type CatOrDogOrBoth = Cat | Dog
type CatAndDog = Cat & Dog

두 연산자 |와 &는 두 가지 타입이 가진 프로퍼티에 대한 집합연산을 수행한 타입을 생성한다. | 연산자가 적용된 CatOrDogOrBoth 타입의 객체에는 Cat 또는 Dog 객체를 할당할 수 있으며, 두 타입 중 한 타입의 프로퍼티를 갖는다. & 연산자가 적용된 CatAndDog은 두 타입의 프로퍼티를 모두 갖는 타입을 생성한다.

03.01 array

let a = [1, 2, 3]			//number[]
let b : string[] = ['a']	//string[]
const c = [2, 'b']			/(string | number)[]

타입스크립트의 배열은 자바스크립트 배열과 마찬가지로 concat, push, search, find, map 등을 허용한다. 그러나 명시적 또는 묵시적으로 정의되는 시점에 동형(homogeneous) 또는 이형(heterogeneous)배열이 되며, 선언된 배열은 선언된 타입 이외의 변수를 받아들이지 않는다. 단, any로 추론된 배열은 요소가 추가되었을 때 타입을 추론하며, 정의된 블록을 벗어날 때 타입을 확정한다.

03.02 tuple

let a: [string, string, number] = ['philip', 'seoul', 2023]
let b: [string, string?] = ['philip']
let c: [string, ...string[]] = ['John', 'Sera', 'Taylor', 'Bob']

03.03 enum

enum Animal {
	Cat = 0,
	Dog = 1,
	Fish = 2
}		//in let a = Animal[10], type of a is number

const enum Color {
	Red = '#c01718',
	Black = '#000000'
}		//in let b = Color[10], throw error

열거형의 이름은 단수, 첫문자를 대문자로 하는 것이 관례라고 한다. 각 멤버에 값이 추론되어 할당되도록 할 수 있고, 명시적으로 할당할 수도 있다. 열거형은 안전하게 사용되기 어렵다고 한다.

profile
Philip Sung

0개의 댓글