타입스크립트
타입지정
- 타입스크립트는 일반 변수, 매개변수(Parameter), 객체속성(Property) 등에: Type과 같은 형태로 타입을 지정할 수 있습니다.
Boolean
1
2
let isBoolean: boolean;
let isDone: boolean = false;
Number
1
2
3
4
5
6
7
8
let num: number;
let integer: number = 6;
let float: number = 3.14;
let hex: number = 0xf00d; // 61453
let binary: number = 0b1010; // 10
let octal: number = 0o744; // 484
let infinity: number = Infinity;
let nan: number = NaN;
문자열: string
'
, ""
뿐만아니라 ES6 문자열도 지원합니다.
1
2
3
4
5
let str: string;
let red: string = "Red";
let green: string = "Green";
let myColor: string = `My color ${red}`;
let yourColor: string = "Your color is" + green;
배열: Array
- 순차적으로 값을 가지는 일반 배열을 나타냅니다. 배열은 다음과 같이 두가지 방법으로 타입선언 할 수 있다.
1
2
3
4
5
6
let fruits: string[] = ["Apple", "Banana", "Mango"];
//또는 let fruits: Array<string>=['Apple', 'Banana', 'Mango'];
2. 숫자만 가지는 배열
let oneToSeven: number[] = [1, 2, 3, 4, 5, 6, 7];
//또는 let oneToSeven: Array<number> = [1,2,3,4,5,6,7];
- 유니언 타입(다중 타입)의 ‘문자열과 숫자를 동시에 가지는 배열’도 선언할 수 있습니다.
|
를 사용하여 여러타입중 하나를 사용 할 수 있다.
1
2
3
let array: (string | number)[] = ["Apple", 1, 2, "Banana", "Mango", 3];
// or
let array: Array<string | number> = ["Apple", 1, 2, "Banana", "Mango", 3];
- 배열이 가지는 항목의 값을 단언할 수 없다면 any를 사용할 수 있습니다.
1
let someArr: any[] = [0, 1, {}, [], "str", false];
- 인터페이스나 커스텀 타입을 사용할 수도 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
interface IUser {
name: string;
age: number;
isValid: boolean;
}
let usrArr: IUser[] = [
{
name: "유리",
age: 50,
isValid: true
},
{
name: "도윤",
age: 20,
isValid: false
},
{
name: "재현",
age: 19,
isValid: true
}
];
- 다음과 같이 특정한 값으로 타입을 대신해 작성할 수도 있습니다. (유용하지 x)
1
2
3
4
let array = 10[];
array= [10];
array.push(10);
array.push(11);
- 읽기 전용 배열을 생성할 수도 있습니다. readonly 키워드나 ReadonlyArray 타입을 사용하면 됩니다.
1
2
3
4
5
6
7
8
let arrA: readonly number[] = [1, 2, 3, 4];
let arrB: ReadonlyArray<number> = [0, 9, 8, 7];
arrA [0] = 123;
arrA.push(123);
arrB[0]= 123;
arrB.push(123);
튜플
- Tuple 타입은 배열과 매우 유사합니다. 차이점이라면 정해진 타입의 고정된 길이 배열을 표현합니다.
1
2
3
4
let tuple: [string, number];
tuple = ["a", 1];
tuple = ["a", 1, 2];
tuple = [1, "a"];
- 다음과 같이 데이터를 개별변수로 지정하지 않고 단일 Tuple 타입으로 지정해 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
// Variables
let userId: number = 1234;
let userName: string = "HEROPY";
let isValid: boolean = true;
//Tuple
let user: [number, string, boolean] = [12345, "HEROPY", true];
console.log(user[0]);
console.log(user[1]);
console.log(user[2]);
- Tuple을 사용해서 2차원 배열 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let users: [number, string, boolean][];
//or
// let users: Array<[number,string,boolean];
users = [
[1, "유리", true];
[2, "재현", true];
[3, "도윤", false];
]
//역시 값으로 타입을 대신할 수 있다.
let tuple: [1, number];
tuple = [1,2];
tuple = [1,3];
tuple = [2,3];
// 에러코드를 확인할 수 있다.
let tuple: [string, number];
tuple = ['a', 1];
tuple = ['a', 1, 2]; // Error - TS2322
tuple = [1, 'a']; // Error - TS2322
- Tuple 정해진 타입의 고정된 길이 배열을 표현하지만, 이는 할당(Assign)에 국한됩니다.
- .push()나 .spice() 등을 통해 값을 넣는 행위는 막을 수 없습니다.
1
2
3
4
5
6
let tuple: [string, number];
tuple = ["a", 1];
tuple = ["b", 2];
tuple.push(3);
console.log(tuple);
tuple.push(true);
- 배열에서 사용한것과 같이 readonly 키워드를 사용해 읽기 전용 튜플을 생성할 수도 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
let a: readonly [string, number] = ["Hello", 123];
a[0] = "World";
//열거형
enum Week {
Sun,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
- 수동으로 값을 변경할 수 있으며, 값을 변경한 부분부터 다시 1씩 증가한다.
- Week 를 콘솔로 출력합니다.
1
2
3
4
console.log(Week);
console.log(Week.Sun);
console.log(Week["Sun"]);
console.log(Week[0]);
- 추가로, Enum은 숫자 값 열거뿐만아니라 다음과 같이 문자열 값으로 초기화할 수 있습니다.
- 이 방법은 역방향 매핑(Reverse Mapping)을 지원하지 않으며 개별적으로 초기화해야 하는 단점이 있습니다.
1
2
3
4
5
6
7
8
// enum 예제 타입스크립트
enum Color {
Red = "red",
Green = "green",
Blue = "blue"
}
console.log(Color.Red);
console.log(Color["Green"]);
1
2
3
4
5
6
7
//enum 예제 자바스크립트로 변환된 코드
var Color;
(function (Color) {
Color["Red"] = "red";
Color["Green"] = "green";
Color["Blue"] = "blue";
})(Color || (Color = {}));
- 위에꺼보단 union type을 사용하는게 좋음
- enum의 내용이 트랜스파일할 때 인라인으로 확장된다는 점이 다릅니다.
1
2
3
4
5
6
const Color = {
Red: "red",
Green: "green",
Blue: "blue"
} as const;
type Color = typeof Color[keyof typeof Color]; // 'Red' | 'Green | Blue'
1
2
3
4
5
const Color = {
Red: "red",
Green: "green",
Blue: "blue"
};
모든타입: Any
- Any는 모든 타입을 의미한다. 따라서 일반적인 자바스크립트 변수와 동일하게 어떤타입의 값도 할당할 수 있다. 외부자원을 활용해 개발할때 불가피하게 타입을 단언할 수 없는 경우, 유용할 수 있다.
1
2
3
4
let any: any = 123;
any = "Hello world";
any = {};
any = null;
- 다양한 값을 포함하는 배열을 나타낼 때 사용할 수도 있습니다.
1
const list: any[] = [1, true, "Anything!"];
- 강한 타입 시스템의 장점을 유지하기 위해 Any 사용을 엄격하게 금지하려면, 컴파일 옵션 “noImplicitAny: true”를 통해 Any 사용시 에러를 발생시킬 수 있다.
알수없는 타입: Unknown
- Any와 같이 최상위 타입인 Unknown은 알수없는 타입을 의미합니다.
- Any와 같이 Unknown에느 어떤타입의 값도 할당할 수 있지만, Unknown을 다른 타입에는 할당할 수 없다.
- 일반적인 경우 Unknown은 타입단언이나 타입가드를 필요로 합니다. 타입 단언이나 가드에 대한 내용을 다른파트에서 정리합니다.