어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ

🔵 [React/TypeScript] 타입 별 예제 2 본문

개발/🔵 React-TypeScript

🔵 [React/TypeScript] 타입 별 예제 2

비니_ 2025. 3. 30. 13:11
728x90

 

4. 타입 별칭

// 타입 별칭

type User = {
  id: number;
  name: string;
  nickname: string;
  birth: string;
  bio: string;
  location: string;
};

// 같은 타입이 중복되면 에러 발생
// type User = {};

// 함수 스코프 단위에서의 타입 중복은 에러 발생하지 않음
function func(){
  type User = {};
}

let user: User = {
  id: 1,
  name: "홍길동",
  nickname: "gildong",
  birth: "1997.01.31",
  bio: "안녕하세요",
  location: "부천시"
};

let user2: User = {
  id: 2,
  name: "김길동",
  nickname: "kim_gildong",
  birth: "2000.01.31",
  bio: "안녕하세요~~~",
  location: "수원시"
}

// 인덱스 시그니처
type CountryCodes = {
  Korea: string,
  UnitedState: string,
  UnitedKingdom: string,
};

let countryCodes: CountryCodes = {
  Korea: "ko",
  UnitedState: "us",
  UnitedKingdom: "uk"
}

// 값이 키-값 쌍이 이후에 추가될 때
type CountryNumberCodes = {
  [key: string]: number;

  // 필수 속성 => 무조건 있어야 하는 값 (없으면 에러)
  // 인덱스 시그니처와 명시적으로 지정한 필수 속성의 타입을 일치 시켜야 함
  Korea: number;
}

// let countryNumberCodes: CountryNumberCodes = {
//   Korea: 410,
//   UnitedState: 840,
//   UnitedKingdom: 826
// };

// let countryNumberCodes: CountryNumberCodes = {} // 에러

let countryNumberCodes: CountryNumberCodes = {
  Korea: 0
}

// **js로 컴파일 하면 타입 속성은 js파일에서 사라짐

 

 

5. enum 타입

// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입

// enum 의 기본 특징: 0 부터 시작해서 +1 씩 됨
// ex) USER = 10을 지정하면, ADMIN = 0, USER = 10, GUEST = 11 이 자동 부여됨
enum Role {
  ADMIN,
  USER,
  GUEST
}

// 문자형 enum
enum Language{
  korean = "ko",
  english = "en"
}

const user1 = {
  name: "홍길동",
  // role: 0 // 관리자라고 가정 // 협업시 헷갈릴 수 있기 때문에
  role: Role.ADMIN,
  language: Language.korean
}

const user2 = {
  name: "아무개",
  // role: 1 // 일반유저로 가정
  role: Role.USER,
  language: Language.english
}

const user3 = {
  name: "게스트",
  // role: 2 // 게스트로 가정
  role: Role.GUEST
}

console.log(user1, user2, user3)

// ** enum은 tsc 명령으로 js로 컴파일 해도 enum 타입은 사라지지 않고 js로 변환 됨

 

 

6. any 타입 // 치트키 타입!

=> 특정 변수의 타입을 우리가 확실히 모를 때

=> 원래는 상위집합에서 하위집합으로 불가능인데 any만 가능해서 치트키라고 함

=> 자바스크립트랑 사용성이 비슷 (타입을 지정해도 대부분의 값이 올 수 있기 때문에)
=> 타입스크립트에서는 잘 쓰지 않길 바람

 

// any

let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
anyVar = {};
anyVar = () => {};
anyVar.toUpperCase();
anyVar.toFixed();

let num: number = 10;
num = anyVar; // 오류 발생하지 않음

let unknownVar: unknown;

unknownVar = "";
unknownVar = 1;
unknownVar = () => {};

num = unknownVar; // 오류 발생

 

// 타입을 정제하였을 경우에는 unknown 값을 할당 가능
if(typeof unknownVar === "number"){
  num = unknownVar;
}

 

7. void 타입

=> 공허, 아무것도 없음을 의미

=> 타입스크립트에서 등장

// void 타입
// void => 공허 => 아무것도 없음을 의미하는 타입

function func1(): string {
  return "hello";
}

// 반환(return)하는 것이 없을 때 = 실행만을 위한 함수
function func2(): void {
  console.log("hi")
}

// return을 그냥 끝내줄 때 = undefined 반환
function func3(): undefined {
  console.log("hey");
  return; // void가 undefined를 포합하고 있기 때문에 생략해도 됨
}

// null 타입은 retrun null 필수, 없으면 에러
function func4(): null {
  console.log("hey");
  return null;
}


let a : void;
// 에러
// a = 1;
// a = "hello"
// a = {};

// 가능
a = undefined; //하위라서 가능
a = null; // tsconfing.json에서 오류 발생을 삭제했기 때문에 가능

 

 

8. never 타입

// never
// never => 존재하지 않는 불가능한 타입
function func5(): never {
  while(true){}
}

function func6(): never {
  throw new Error();
}


let anyVar: any;
let b: never;
// 어떤 값도 할당 할 수 없음
// b = 1;
// b = {};
// b = "";
// b = null;
// b = undefined;
// b = any;
728x90
Comments