타입 정의가 너무 길면 깔끔한 코드를 위해 타입에 별칭을 부여해도 된다
Type Aliases
1. 이게 길고 보기싫으면
2. 나중에 또 사용하고 싶으면
일반 변수랑 차별을 두기 위해 관습적으로 대문자로 시작한다
//변수
type Animal = string | number | undefined;
let aniaml :Animal;
//객체
type person = {
name : string,
age : number,
}
let teacher :person = { name : 'john', age : 20 }
const 변수는 재선언, 재할당이 불가능하며 값을 변경하면 에러가 난다
즉 값이 변하지 않는 변수를 만들고 싶을 때 const를 사용하는데 객체 자료는 const로 선언을 해도 객체 내부를 변경 가능하다
readonly를 사용하여 속성변경을 막아줄 수 있다
type Girlfriend = {
readonly name : string,
}
let girlfriend :Girlfriend = {
name : 'amber'
}
여친.name = 'jiwon' //readonly라서 에러남
에러는 에디터에서 나는 것일뿐, 변환된 js 파일은 에러없다
말 그대로 문자 그대로의 타입이다
string, number 같은 것 외에 내가 타입을 작명할 수 있다
let john :'대머리';
let kim :'솔로';
이렇게 되면 john이라는 변수는 '대머리'라는 글자만 할당할 수 있다
즉 해당 변수에 특정 글자, 숫자만 가질 수 있게 제한되는 것이다
var obj = {
name : 'kim'
}
function func(a : 'kim') {
}
func(obj.name)
위 코드는 에러난다
- 타입을 object의 value로 바꿔준다
- object안에 있는 모든 속성을 readonly로 바꿔준다
var obj = {
name : 'kim'
} as const
function func(a : 'kim') {
}
func(obj.name)
에러 해결 !
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"];
}