TypeScript-데이터 타입

귤녹차·2025년 1월 25일

TypeScript의 몇 가지 데이터 타입에 대해서 담았습니다.

1️⃣ any & unkwon

any

타입을 지정하지 않고 어떤 타입도 허용되는 타입

타입 검사 없이 모든 값을 할당할 수 있다.

let value: any = "hello";
value = 42; // 아무 타입이나 할당 가능

// 바로 사용해도 에러 없음
console.log(value.toUpperCase()); // "HELLO"

unknwon

알 수 있는 값이지만 타입을 모를 때 사용하는 타입

반드시 타입을 확인하거나 변경해야 하므로, 코드의 안정성을 높이는 데 유용하다.

let value: unknown = "hello";
value = 42; // 아무 타입이나 할당 가능

// 사용하기 전에 타입 검사 필요
if (typeof value === "string") {
  console.log(value.toUpperCase()); // "HELLO"
}

2️⃣ tuple

배열을 사용하지만 배열에 정확한 아이템 개수와 , 순서까지 명시하는 타입이다.

따라서 아래와 같이 명시되어 있는 아이템의 타입과 개수 외에 아이템을 추가하는 것은 불가능하다.

let A: [string, number, boolean] = ["Alice", 25, true]; // 올바른 사용
let B: [string, number, boolean] = ["Alice", 25, true, 2]; // 불가

배열의 아이템으로 tuple을 사용할 수 있다.

let people: [string, number][] = [
  ["Alice", 25],  // 첫 번째 튜플
  ["Bob", 30],    // 두 번째 튜플
  ["Charlie", 35] // 세 번째 튜플
];

3️⃣ 함수와 void

// 함수 타입을 변수로 정의 (return 값이 있음)
let multiply: (a: number, b: number) => number = function(a,b){
	return a + b}

let result = multiply(4, 5);

void은 리턴 값이 없는 함수에서 반환되는 데이터 타입이다.

// 함수 타입을 변수로 정의 (반환 값이 없음)
let logMessage: (message: string) => void = function(){
	console.log(message);
}

logMessage("Hello, World!");  // 출력: Hello, World!

4️⃣Union

여러 타입을 하나의 변수에 지정할 수 있는 타입. | 기호를 사용하여 여러 타입을 결합할 수 있다.

두 개 이상의 타입도 결합이 가능하다

// Union 타입을 사용하여 숫자와 문자열을 받을 수 있는 변수
let value: number | string;

value = 42;      // 숫자 할당 가능
console.log(value); // 42

value = "hello";  // 문자열 할당 가능
console.log(value); // "hello"

만일 배열에 여러 타입의 변수를 지정하고 싶다면 union을 통해서 가능하다,

let flags: (boolean | string)[] = [true, "active", false, "inactive"];

5️⃣Intersection

여러 타입을 결합하여 하나의 타입으로 합치는 방식, & 기호를 사용하여 여러 타입을 결합할 수 있다.

union과 달리 두 타입을 모두 충족하는 변수가 입력되어야 한다.

// 두 개의 타입을 결합한 예시
type Person = { name: string; age: number };
type Address = { city: string; country: string };

// PersonWithAddress 타입은 Person과 Address의 모든 속성을 포함합니다.
let personWithAddress: Person & Address = {
  name: "Alice",
  age: 30,
  city: "New York",
  country: "USA",
};
profile
배우는 과정에 즐거움을 느끼고 있습니다.

0개의 댓글