typescript 기본 타입

김예린·2024년 3월 5일
0

Boolean

true or false 값 나타냄

2가지의 상태(켜짐/꺼짐, 유효함/유효하지 않음)를 표현하고 싶은 경우
→ boolean을 사용!
3가지 이상의 상태를 표현하고 싶은 경우
→ enum이나 string을 사용!

number

타입스크립트에서 사용하는 모든 숫자 나타냄. 정수 실수 2,8,16진수 까지 모두. 그냥 숫자면 number사용하자

string

문자겠지 템플릿 리터럴도 사용하자

function greet(name: string): string {
  return `안녕, ${name}!`;
}

const name = "Spartan";
const greeting = greet(name);
console.log(greeting);

배열

기본 타입 뒤에 [] 붙여주자
number[], string[] . . .

function calculateSum(numbers: number[]): number {
  let sum: number = 0;
  for (let i = 0; i < numbers.length; i++) {
    sum += numbers[i];
  }
  return sum;
}

const testScores: number[] = [90, 85, 78, 92, 88];
const sumScore = calculateSum(testScores);
console.log(`점수의 총합: ${sumScore}`);

tuple

서로 다른 타입의 원소를 순서에 맞게 가질 수 있는 특수한 형태의 배열
그니까 배열은 내가 정의한 같은 타입의 원소만 가질 수 있음
근데 튜플은 어떤 타입의 원소를 허용할 건지 정의만 해주면 여러 타입 가능

const person: [string, number, boolean] = ['Spartan', 25, false];
const person2: [string, number, boolean] = [25, 'Spartan', false]; // 오류!

push 메소드 사용해서 추가는 가능하나 하지 말자
정의된 데이터 타입의 개수와 순서에 맞추어 저장하자

enum

enum은 명확하게 관련된 상수 값들을 그룹화하고자 할 때 사용하자
그러나 값의 수가 많지 않고, 값들 사이의 관계가 뚜렷하지 않으면 사용하지 않는 게 낫다!

열거형 데이터 타입. 다양한 상수를 보다 더 이해하기 쉬운 문자열 이름으로 접근하고 사용할 수 있게 하는 타입
enum 안에 있는 각 요소는 값이 설정되어 있지 않으면 기본적으로 숫자 0으로 시작함요
이넘 안의 요소에는 number 혹은 string 타입의 값만을 할당할 수 있음

enum UserRole {
  ADMIN = "ADMIN",
  EDITOR = "EDITOR",
  USER = "USER",
}

enum UserLevel {
  NOT_OPERATOR, // 0
  OPERATOR // 1
}

function checkPermission(userRole: UserRole, userLevel: UserLevel): void {
  if (userLevel === UserLevel.NOT_OPERATOR) {
    console.log('당신은 일반 사용자 레벨이에요');
  } else {
    console.log('당신은 운영자 레벨이군요');
  } 

  if (userRole === UserRole.ADMIN) {
    console.log("당신은 어드민이군요");
  } else if (userRole === UserRole.EDITOR) {
    console.log("당신은 에디터에요");
  } else {
    console.log("당신은 사용자군요");
  }
}

const userRole: UserRole = UserRole.EDITOR;
const userLevel: UserLevel = UserLevel.NOT_OPERATOR;
checkPermission(userRole, userLevel);

userRole의 데이터타입에는 enum이 들어감

const, readonly

불변성을 유지 시켜줌
const는 잘 아니, readonly만...

readonly는 객체의 속성을 불변으로 만드는 데 사용된다.

클래스의 속성에 readonly가 아닌 const를 쓰면 에러남. const는 일반 변수에만 쓰자

unknown

타입스크립트에서 any타입은 모든 타입의 슈퍼타입이다. 그래서 모든 타입의 값이든 저장 가능 만능임 그러니까 타입중시의 타입스크립트에서는 쓰지말자

대신 unknown 쓰자

any의 대체제 unknown이란?

  • unknown 타입은 any 타입과 비슷한 역할을 하지만 더 안전한 방식으로 동작합니다.
  • unknown 타입의 변수에도 모든 타입의 값을 저장할 수 있어요.
  • 하지만, 그 값을 다른 타입의 변수에 할당하려면 명시적으로 타입을 확인해야 합니다!
let unknownValue: unknown = '나는 문자열이지롱!';
console.log(unknownValue); // 나는 문자열이지롱!

let stringValue: string;
stringValue = unknownValue; // 에러 발생! unknownValue가 string임이 보장이 안되기 때문!
stringValue = unknownValue as string;
console.log(stringValue); // 나는 문자열이지롱!

stringValue = unknownValue as string;

위의 코드를 타입 단언(Type Assertion)이라함
문자열로 하겠다 뭐 이런 의미

Union

unknown도 한계가 있다. 재할당이 일어나지 않으면 타입 안전성이 보장되지 않음
그래서 union

union이란?

  • 이럴 때를 위해 union 타입이라는 것이 사용됩니다.
  • union여러 타입 중 하나를 가질 수 있는 변수를 선언할 때 사용됩니다!
  • union은 | 연산자를 사용하여 여러 타입을 결합하여 표현합니다.
type StringOrNumber = string | number; // 원한다면 | boolean 이런식으로 타입 추가가 가능해요!

function processValue(value: StringOrNumber) {
  if (typeof value === 'string') {
    // value는 여기서 string 타입으로 간주됩니다.
    console.log('String value:', value);
  } else if (typeof value === 'number') {
    // value는 여기서 number 타입으로 간주되구요!
    console.log('Number value:', value);
  }
}

processValue('Hello');
processValue(42);
profile
아자아자

0개의 댓글