-
primitive
원시 데이터 타입으로 number, string, boolean
1// 명시적으로 number 타입을 설정
2let product_id:number = 124981;
3
4// 명시적으로 string 타입을 설정
5let product_name:string = 'VR 글래스';
6
7// 명시적으로 boolean 타입을 설정
8let is_waterprofing:boolean = false;
-
unknown
unknown은 타입가드를 사용하도록 유도한다.
-
any
어떤 값이든 재할당 가능하다.
어떤 타입을 할당해야 할지 모를 경우 사용할 수 있고, 되도록 사용하지 말 것
-
array
1// 오직 숫자 아이템만 허용
2let nums:number[] = [100, 101, 102];
3
4// 오직 문자 아이템만 허용
5let strs:string[] = ['ㄱ', 'ㄴ', 'ㄷ'];
6
7// 오직 불리언 아이템만 허용
8let boos:boolean[] = [true, false, true];
9
10// 모든 데이터 타입을 아이템으로 허용
11let anys:any[] = [100, 'ㄴ', true];
12
13// 특정 데이터 타입만 아이템으로 허용
14let selects:(number|string)[] = [102, 'ㅇ'];
타입 지정이 없더라도 암시적으로 설정이 된다.
1let members = ['이권', '감장겸', '장도일'];
2members = [9, 13, 26]; // 오류
3members = 201 // 오류
-
tuple
지정된 형식에 따라 아이템 순서를 설정해야 되고, 추가 되는 아이템 또한 tuple 타입만 가능하다.
1let book__name_price:[string, number] = ['카밍 시그널', 13320];
2
3book__name_price = [13320, '카밍 시그널']; // 오류 순서도 지켜야 한다.
4
-
enum
멤버라고 불리는 값의 집합을 이루는 자료형. 각 멤버는 값이 설정되지 않을 경우 순서대로 0~ 의 값을 가진다.
1enum Team {
2 Manager = 101,
3 Planner = 208,
4 Developer = 302,
5 Designer, // 302 + 1
6}
7
8let yamoo9:number = Team.Manager; // (enum member) Team.Manager = 101
9let sarha:number = Team.Designer; // (enum member) Team.Designer = 303
숫자값을 통해 멤버 이름을 도출할 수 있다.
1let role:string = Team[302]; // 'Developer'
-
function / union / void
function
1function setInfo(id:number, name:string) {
2 return { id, name };
3}
4
5let product_one = setInfo(120912, '스노우보드');
union : 매개변수에 설정 가능한 타입을 여러개 사용하게 설정하는 것, |
1function setInfo(id:number|string, name:string){
2 return { id, name };
3}
void
결과 값을 반환하지 않는 함수에 설정
1function assignClass(name:string): void {
2 document.documentElement.classList.add(name);
3}
함수 식
변수에 함수를 할당하는 식
1let assignClass: (n:string) => void
2
3let assignClass = function(name){
4 console.log('')
5}
6
-
object
변수에 초기 설정된 값을 암시적으로 할당 가능한 데이터 타입으로 설정하기 때문에 달ㄴ 형태로 할당될 경우 다음과 같은 오류를 출력한다.
1let Dom: {
2 version:string,
3 el:()=>void,
4 css:()=>void
5};
6
7Dom = {
8 version: '0.0.1',
9 el(){},
10 css(){}
11};
12
13Dom = {
14 append(){} //에러 타입으로 설정되지 않은 속성을 추가했다.
15}
매번 추가할 때 타입을 지정하기 번거롭다. 그래서
1let Dom: {
2 version: string,
3 el: () => void,
4 css: () => void,
5 [propName: string]: any // ⬅︎ 오류를 내지 않게 한다.
6};
-
null, undefined
데이터 타입, 하나의 값이다.
"strictNullChecks”설정이 true일 경우
1let nullable: null = null;
2
3nullable = undefined; // 오류 null과 undefined는 다른 타입
false는 상관없다.
-
never
가장 작은 집합으로 아무 값도 포함하지 않는 공집합이다. never로 선언된 변수는 아무런 값도 할당할 수 없다.
일반적으로 함수의 리턴 타입으로 사용된다. 항상 오류를 출력하거나 리턴 값을 절대로 내보내지 않음을 의미한다. 무한 루프에 빠지는 것과 같다.
1// 항상 오류 발생
2function invalid(message:string): never {
3 throw new Error(message);
4}
5
6// 무한 루프
7function infiniteAnimate(): never {
8 while ( true ) { infiniteAnimate(); }
9}
10
-
사용자 정의 타입
type alias를 정의하려면 type키워드를 사용한다.
1// 타입 별칭(Type Alias)
2type operation = {
3 data: number[],
4 output:(num:number)=>number[]
5};
6
7// 사용자 정의 타입 operation 적용 예시
8let sum:operation = {
9 data: [10, 30, 60],
10 output(num){
11 return this.data.map(n=>n+num);
12 }
13};
-
타입 어설션
type assertion이란 컴파일러에게 “이 타입이 특정 타입 임을 단언한다.”라고 말하는 것.
타입 cast와 비슷하고, 오직 컴파일 과정에서만 사용된다. 2가지 방법이 있다.
-
angle braket
1let assertion:any = "타입 어설션은 '타입을 단언'합니다.";
2
3// 방법 1: assertion 변수의 타입을 string으로 단언 처리
4let assertion_count:number = (<string>assertion).length;
-
as