원시 타입
아래와 같이 타입을 설정하면 다른 타입의 종류를 할당할 수 없다. 다른 타입을 할당할 경우 타입 에러가 발생한다.
number
1
2
const age:number = 30 // number 타입만 할당이 가능하다.
const name:string = 3 // error (string 타입을 할당해야 한다.)
string
1
const name:string = 'sara'; // string 타입만 할당이 가능하다.
boolean
1
const isActive:boolean = true; // beelean 타입만 할당이 가능하다.
undefined : 값이 결정되지 않은 상태
1
2
3
4
5
6
7
8
let age: number | undefined // number 이거나 undefined
age = 30;
age = undefined;
function sum (): number | undefined {
// .. return 되는 값이 number 이거나 undefined
};
null: 값이 없는 상태
1
2
3
let name: string | null;
name = 'ann';
name = null;
unknown
어떤 데이터의 종류가 담길지 알 수 없는 상태
로 어떤 타입의 데이터든 할당할 수 있다.- 가능하면 사용하지 않는 것이 좋다.
1
2
3
let unknown:unknown = 'hello world';
unknown = 30;
unknown = true;
any
어떤 데이터의 종류든 담을 수 있는 상태
로 어떤 타입의 데이터든 할당할 수 있다.- 가능하면 사용하지 않는 것이 좋다.
1
2
3
let anything:any = 'hello world';
unknown = 30;
unknown = true;
Object 타입
Object
1
2
3
4
function object(obj:object) {}
object({age: 22});
object([1, 2, 3, 4, 5]);
Array
- 문자열만 가지는 배열
1
const names: string[] = ['teaback', 'taesoon', 'sara'];
1
const names: Array<string> = ['teaback', 'taesoon', 'sara'];
- number 타입만 가지는 배열
1
const ages: number[] = [20, 30, 50];
1
const ages: Array<number> = [20, 30, 50];
- 문자열과 숫자를 동시에 가지는 배열
1
const arr: (string | number)[] = [10, 'hello', 22, 'world', 34];
1
const arr: Array<string | number> = [11, 'hello', 2, 'world', 33, 35];
- 배열이 가지는 값의 타입을 어떤 것이든 담을 때 any를 사용할 수 있다.
1
const arr: (any)[] = [1, 'a', 2, 'b', 'c', 3];
1
const arr: Array<any> = [1, 'a', 2, 'b', 'c', 3];
readonly
- 인자의 데이터를 변경할 수 없고 읽을 수만 있다.
1
2
3
4
5
6
function readNumbers(numbers: readonly number[]) { // Array<numbers>는 사용할 수 없다.
console.log(numbers)
numbers.push(6); // error
}
readNumbers([1, 2, 3, 4, 5])
function : void
- 아무것도 리턴하지 않는다.
1
2
3
4
function print():void {
console.log('hello');
return; // 생략 가능
}
function: never
- 절대 리턴할 수 없다.
1
2
3
4
5
function throwError(message: string): never {
// message -> server (log)
// throw new Error(message);
// while 문..
}
promise
- 숫자를 리턴하는 promise
1 2 3 4 5 6
function fetchNum(id: string): Promise<number> { ... return new Promise((resolve, reject) => { resolve(100); }); }
optional parameter
- 인자로 전달 받을수도 있고 전달 받지 않을 수도 있다.
1
2
3
function fullName(firstName:string, lastName?:string) {} // lasName을 전달 받을 수 있고 전달 받지 않을 수 있다.
fullName('minsoo', 'kim');
fullName('minsoo');
default
- 인자를 전달 받지 않을 때 기본 값으로 설정해 놓을 수 있다.
1
2
3
function printMessage(message:string = 'default message') {};
printMessage(); // default message
Rest parameter
- 전달하는 인자 개수의 제한이 없고 동일한 타입의 데이터를 인자로 전달할 때 사용할 수 있다.
1
2
3
4
5
6
function addNumbers(...numbers: number[]): number {
return numbers.reduce((acc, curr) => acc + curr);
};
addNumbers(1, 2);
addNumbers(1, 2, 3, 4);
Tuple
- 고정된 서로 다른 타입을 할당할 때 사용한다.
- 사용을 권장하지 않음.
- interface, type alias, class 대체해서 사용하는 것이 좋음.
1
2
3
4
5
6
let anything: [string, number];
anything = ['abc', 123];
anything[0];
anything[1];
const [string, number] = anything;
Type Alias
- 아래와 같이
Text
,Num
,Person
라는 타입을 정의할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type Text = string;
const name: Text = 'ellie';
const const address: Text = 'korea';
type Num = number;
type Person = {
name: string;
age: number;
};
const person: Person = {
name: 'kim rae young',
age: 33,
};
- 아래와 같이 Name에 ‘name’이라는 타입을 정의한다면 ‘name’만 할당할 수 있다.
1
2
3
type Name = 'name';
let name = Name;
name = 'name'
Union type
- 아래의
Size
타입과 같이 다중의 타입을 말한다. - printSize 함수의 인자는
Size
타입을 인자로 전달받기 때문에25 | 26 | 27 | 28
의 값만 전달받을 수 있다.
1
2
3
4
5
6
type Size = 25 | 26 | 27 | 28;
function printSize(size: Size) {
console.log(size);
};
printSize(25);
printSize(27);
Intersction type : &
- 타입 하나로 묶을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type A = {
name : string;
age: number;
};
type B = {
feeling : () => void;
}
function anything(AB: A & B) {
};
anything({
name: 'taeback',
age: 1,
feeling: () => {}
});
Enum
- enum은 다른 값을 할당할 수 있어 가능한 enum을 사용하지 않는것이 좋다.
- 가능한 union 타입을 사용한지만 , 네이티브 프로그래밍에는 enum을 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
enum Aphabet {
A,
B,
C,
D,
...
}
// enum에 따로 값을 정하지 않으면 0 부터 하나씩 증가한다.
// 1을 할당 해주면 1부터 증가하고 문자열도 할당할 수 있다.
let b = Aphabet.B;
b = 10
console.log(b); // 10
// 위와 같이 다른 값을 할당할 수 있어 가능한 enum을 사용하지 않는 것이 좋다.