목차
- 기본적인 타입
- 선택적 타입(객체, Alias)
- 함수의 타입 명시(함수 선언, 화살표 함수)
- readonly(읽기 전용) 속성 추가
1. 기본적인 타입
let a : number = 1; // number
let a : number[] = [1,2]; // 배열의 엘리먼트가 number 인 array
let b : string = "il"; //string
let b : string[] = []; // 배열의 엘리먼트가 string 인 array
let c : boolean = true; // boolean
let c : boolean[] = [true]; // 배열의 엘리먼트가 boolean 인 array
2. 선택적 타입
어떤 객체가 있다고 할 때,
객체의 어떠한 속성은 모든 객체가 동일하게 보유하고 있는 속성
어떤 속성은 특정 객체들만 보유하고 있는 선택적 변수일 수도 있다.
코드를 통해 자세히 알아보자.
2-1 객체의 타입을 명시적으로 지정
// 틀린 예시
const player : {
name: string, // player의 타입은 객체이며, string 타입의 name이라는 속성을 가질 것이다.
age: number // player의 타입은 객체이며, number 타입의 age라는 속성을 가질 것이다
} = {
name: 'ivy' // age 속성을 부여하지 않았기 때문에 에러 발생
}
// 옳은 예시
const player : {
name: string, // player의 타입은 객체이며, string 타입의 name이라는 속성을 가질 것이다.
age?: number // player의 타입은 객체이며, number 타입의 age라는 "선택적인" 속성을 가질 것이다
} = {
name: 'ivy' // age는 선택적 속성이기 떄문에 객체 생성 시 속성 부여하지 않아도 에러 발생하지 않음
}
//틀린 예시
if(player.age < 10){ // age 선택적인 속성이므로 값이 undefined 일 수도 있기 때문에 에러 발생
}
//옳은 예시
if(player.age && player.age < 10){
// player에 age 속성이 있으며, 속성값이 10보다 작은 경우 코드 실행
}
2-2. Alias 타입을 통한 코드의 재사용
type Player = {
name: string,
dob?: number
}
const player1 : Player = { // 객체의 타입을 Player로 명시
name: 'Son',
dob: 19920708
}
const player2 : Player = { // 객체의 타입을 Player로 명시
name: 'Kane'
}
참고로 아래와 같은 방법도 가능하지만, 아래와 같이 과도하게 재사용하는 것은 그다지 추천하지 않는다.
Alias 타입의 사용은 코드가 명확하고 깔끔해질 때까지만 하면된다.
다만 아래와 같은 방법도 가능하다는 것만 알아두자.
type Name = string;
type Dob = number;
type Player = {
name: Name,
dob?: Dob
}
이번엔 함수의 return 값을 지정해보자
함수가 리턴하는 값이 어떤 타입인 지 알게되면
자동완성 기능과 더 많은 보호 장치를 줄것이다.
player의 객체를 만들고 그 결과 player를 반환하는 함수를 만들어보자.
3. 함수의 타입 명시
- 인자값에 대한 타입 명시
- return값에 대한 타입 명시
3-1. 함수 선언의 방식
type Player = {
name: string,
dob?: number
}
// Player는 객체이며 속성값이 문자열인 name 속성과 속성값이 number인 선택적 속성 dob를 가지고 있다고 할때,
// playerMaker라는 함수를 이용해서 Player 객체를 리턴해보자
//틀린 예시
function playerMaker(name:string){ // 인자값의 타입을 지정
return {
name
}
}
const player1 = playerMaker('son')
player1.age = 30 // 에러 발생
// 위와 같이 작성한다면 타입스크립트는 타입이 name인 속성을 가지고 있는 객체를 리턴한다는 것만을 알게 된다.
// 따라서 age 속성에 값을 줘버리면 에러가 발생한다.
// 옳은 예시
function playerMaker(name:string) : Player{ // 인자값 및 함수의 return에 대한 타입을 지정
return{
name
}
}
const player1 = playerMaker('son')
player1.age = 30
3-2. 화살표 함수
const playerMaker = (name:string) : Player => ({name}) //동 일한 문법으로 : Player라고 작성해주면된다.
4. readonly 속성 추가
- readonly 속성 추가 시, 속성값을 수정하려고 시도하면 에러 발생
- readonly속성을 가지게 되면 해당 속성은 불변성을(immutable)을 가지게 됨
객체의 속성에 readonly 속성을 부여할 겨웅
type Player = {
readonly name: string, // readonly 속성 추가
age? number
}
const playerMaker = (name:string) : Plyaer => ({name})
const player1 = playerMaker({'Son'})
player1.name = 'Kane' // 에러 발생
배열에 readonly 속성 부여할 경우
- map과 filter 같이 배열을 변화시키지 않는 메서드는 사용 가능
const numbers: readonly number[] = [1,2,3,4]
numbers.push(1) //에러 발생
'타입스크립트' 카테고리의 다른 글
타입스크립트6. 객체지향 프로그래밍 (0) | 2022.05.16 |
---|---|
타입스크립트5. 함수의 call signatures (0) | 2022.05.15 |
타입스크립트4. 데이터 타입(2) (0) | 2022.05.15 |
댓글