typescript 왜 타입을 변수에 담아서 쓰지? type, type alias, readonly

jangdu·2023년 3월 23일
0

typescript

목록 보기
12/16

타입을 정의하고 코드를 짜다가 보면 타입이 길어지는 경우가 있다.

타입 정의가 너무 길면

let a :string | number | undefined;

이런경우 길어서 똑같이 쓰려면 너무 귀찮고 보기도 싫다.
이럴때는 type키워드를 사용하면되는데
이걸 type alias라고 한다.

type Atype :string | number | undefined;
let a : A;

이렇게 쓰면 위 타입을 변수처럼 계속 이용할 수 있다.
관습적으로 대문자로 시작하고
js에서 쓰는 type이랑 차이를 두려고 보통 뒤에 Type붙여서 작명함

object 타입도 저장할 수 있음

type person = {
  name:string,
  age:number,
}
let daddy : person = { name:'dudu', age:40 }

이렇게 타입을 미리 지정하면 상당히 편할듯
type안쓰면 개길어지고 더러워짐

readonly

const변수는 값이 변하지 않는 변수를 만들 때 사용하는데,
재할당 할 때 err라서 값이 변하는걸 감지하고 차단이 가능해서 그럼 ㅇㅇ

const girl = {
  name : 'sugi'
}
girl.name = 'yoona' // const인데 err가 안남

근데 object쓰면 const써도 그 내부는 변경이 가능한데
const 변수는 재할당할때만 막아주고 그 안에있는건 상관을 안한다.
object 속성이 안바뀌는게 좋으면 이거 쓰면 됨

Type Girltype = {
  readonly name : string
}
let girlfriend: Girltype = {
  name : 'sugi'
}
girlfriend.name = 'yoona' // 이러면 에러남

readonly키워드를 사용하면 특정 속성을 변경 못하게 잠궈준다.
물론 컴파일 할 때만 에러고 js는 잘 바뀌긴 함

type 여러개 합치기

type Name = string;
type Age = number;
type NewOne = Name | Age; 

|연산자를 이용해 UnionType을 만드는거도 된다.
위 코드에 NewOne은 string | number
ㅇㅇ

type PositionX = { x: number };
type PositionY = { y: number };
type XandY = PositionX & PositionY
let position :XandY = { x : 1, y : 2 }

object에 지정한 타입은 합치기도 된다.
&를 쓰면 두개 속성을 합쳐준다.
위 코드에서 position은 { x:number, y:number }로 정의된다.
이런걸 extend라고한다.

물론 alias끼리만 되는게 아니고 뭐 Type alias & { name : string }이러거도 됨

type 키워드는 재정의 불가능

type Name = string;
type Name = number;

이러면 에러가 나는데, 이럴땐 interface쓰면 재정의가 가능하다.
재정의하면 &하는거랑 똑같은 기능을 한다.

profile
대충적음 전부 나만 볼래

0개의 댓글