개발/typescript
타입스크립트 기초 문법 - 타입의 종류(2)
모그
2023. 12. 21. 15:57
1.Enum (열거형 타입)
기본형은 이렇다.
enum Test {
ADMIN,
CUSTOMER,
USER
}
숫자를 직접 할당해도 되지만 굳이 입력하지 않아도 자동으로 할당된다.
enum Test {
ADMIN = 0,
CUSTOMER = 1,
USER=2
}
배열처럼 처음부터 0,1,2 순서로 할당됨.
물론 원하는대로 할당 숫자와 위치를 지정할 수도 있다.
enum Test {
ADMIN ,
CUSTOMER = 10,
USER
}
Test.ADMIN //0
Test.CUSTOMER //10
Test.USER //11
프로퍼티값이 많고, 코드가 복잡할 경우 혹시 모를 오타와 통일되지 않는 값을 적어넣는 등의 실수를 방지할 수 있다.
const user1 = {
name:"이름이다",
(중간에 많은 프로퍼티 존재)
role: "user"
}
...
..
.
const user25 = {
name:"이름이다25",
(중간에 많은 프로퍼티 존재)
role:"usere"
}
이런 오타 방지 가능
문자 할당도 가능하다.
enum Test {
ADMIN = "admin" ,
CUSTOMER = "customer",
USER = "user"
}
2. any
특정 변수 타입을 모를 때 사용한다. 이 변수에 문자가 담길지, 숫자가 담길지, 불리언이 담길지...
- any타입에는 모든 값이 들어가고, 모든 메서드가 사용 가능하다.
let anyVar:any = 10;
anyVar = "Hi"
anyVar = {}
anyVar = ()=>{};
anyVar.toUpperCase();
anyVar.toFixed();
위 예시처럼 숫자, 문자, 객체, 함수까지 모두 할당 가능하고,
문자열 메서드, 숫자 메서드를 사용해도 오류가 뜨지 않는다.
하지만 이렇게 무분별하게 any 타입을 사용하고 값을 재할당 할 경우, 런타임에서 오류가 발생할 수 있음에 주의해야한다.
위 코드에서도 계속해서 다른 타입의 값을 anyVar 에 할당했다.
최종적으로 anyVar에 함수가 할당되고,
anyVar.toUpperCase(); 함수가 실행되면 anyVar에서 문자열을 찾을 수 없어 오류가 발생한다.
any타입은 불가피한 경우가 아니면 사용 자제해보기!
- 변수에도 any타입을 담을 수 있다.
let num:number = 100;
let anyVar:any = "hello"
num = anyVar
3.unknown
- any처럼 어떤 값이라도 저장할 수 있지만 보다 안전하다.
- 연산, 메서드 사용이 불가하다.
- any와는 달리 어떤 변수에도 저장 불가능
4.void
- 값을 반환하지 않는 함수의 반환값 타입을 정의한다.
function foo():void{
console.log("hello") // return 값이 없다
}
- 변수에도 void 할당이 가능하다.
let testVar:void
testVar = undefined;
이 때 void 타입인 변수에는 undefined만 담을 수 있다.
tsconfig.json에서 컴파일러옵션의 strictNullChecks을 false 체크하면 null도 담을 수 있다.
5.never
- 말 그대로 불가능을 의미
- 함수가 어떤 값도 반환하지 않는 모순된 함수일경우
- 변수에 할당 시 어떤 값도 담을 수 없다. (any 포함)