타입을 정의하고 코드를 짜다가 보면 타입이 길어지는 경우가 있다.
let a :string | number | undefined;
이런경우 길어서 똑같이 쓰려면 너무 귀찮고 보기도 싫다.
이럴때는 type
키워드를 사용하면되는데
이걸 type alias라고 한다.
type Atype :string | number | undefined;
let a : A;
이렇게 쓰면 위 타입을 변수처럼 계속 이용할 수 있다.
관습적으로 대문자로 시작하고
js에서 쓰는 type이랑 차이를 두려고 보통 뒤에 Type붙여서 작명함
type person = {
name:string,
age:number,
}
let daddy : person = { name:'dudu', age:40 }
이렇게 타입을 미리 지정하면 상당히 편할듯
type
안쓰면 개길어지고 더러워짐
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 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 Name = string;
type Name = number;
이러면 에러가 나는데, 이럴땐 interface쓰면 재정의가 가능하다.
재정의하면 &하는거랑 똑같은 기능을 한다.