[typescript] 4. 타입을 변수에 담기

지렁·2023년 10월 23일
1

타입 정의가 너무 길면 깔끔한 코드를 위해 타입에 별칭을 부여해도 된다

Type Aliases
1. 이게 길고 보기싫으면
2. 나중에 또 사용하고 싶으면



💥 Type Aliases

[type 타입변수명 = 타입종류]

일반 변수랑 차별을 두기 위해 관습적으로 대문자로 시작한다

//변수
type Animal = string | number | undefined;
let aniaml :Animal;

//객체
type person = {
  name : string,
  age : number,
}

let teacher :person = { name : 'john', age : 20 } 

💥 readonly (수정금지 역할)

const 변수는 재선언, 재할당이 불가능하며 값을 변경하면 에러가 난다
즉 값이 변하지 않는 변수를 만들고 싶을 때 const를 사용하는데 객체 자료는 const로 선언을 해도 객체 내부를 변경 가능하다

const 변수는 재할당만 막아줄 뿐이지 그 안의 object 속성 바꾸는 것까지 관여하지 않기 때문이다

readonly를 사용하여 속성변경을 막아줄 수 있다

type Girlfriend = {
  readonly name : string,
}

let girlfriend :Girlfriend = {
  name : 'amber'
}

여친.name = 'jiwon' //readonly라서 에러남

에러는 에디터에서 나는 것일뿐, 변환된 js 파일은 에러없다


💥 Literal Type

말 그대로 문자 그대로의 타입이다
string, number 같은 것 외에 내가 타입을 작명할 수 있다

let john :'대머리';
let kim :'솔로';

이렇게 되면 john이라는 변수는 '대머리'라는 글자만 할당할 수 있다
즉 해당 변수에 특정 글자, 숫자만 가질 수 있게 제한되는 것이다

주의

var obj = {
  name : 'kim'
}
function func(a : 'kim') {

}
func(obj.name)

위 코드는 에러난다

에러 원인

  • obj.name은 'kim' 타입이 아닌 string타입이기 때문이다

해결방법

  • assertion 사용
  • as const 사용

💥 as const

  1. 타입을 object의 value로 바꿔준다
  2. object안에 있는 모든 속성을 readonly로 바꿔준다
var obj = {
  name : 'kim'
} as const 
function func(a : 'kim') {

}
func(obj.name)

에러 해결 !


💥 type은 extend 가능, 재정의 불가능

extend는 합치다는 뜻이다
아래처럼 type을 정의한 후 union type을 새로 만들거나, 새로운 타입에 and를 이용하여 합칠 수 있다

type Name = string;
type Age = number;
type NewOne = Name | Age; 
type PositionX = { x: number };
type PositionY = { y: number };
type XandY = PositionX & PositionY
let 좌표 :XandY = { x : 1, y : 2 }

또한 type은 재정의가 안된다는 특징이 있다

연습

type RSP = "rock" | "sissor" | "paper";
function rsp(x: RSP): RSP[] {
  return ["rock"];
}
profile
공부 기록 공간 🎈💻

0개의 댓글