자바스크립트 기반의 언어이며, 자바스크립트의 기능을 포함하면서 타입 체크를 지원한다
기본 타입은 데이터 타입, 객체 타입, 특수 타입으로 나눌 수 있다
변수의 데이터 타입을 지정
let x : string = '문자열';
새로운 기능에 대한 명세이며, 인터페이스를 상속받은 클래스는 인터페이스의 명세를 구현해야한다
string
, number
타입과 마찬가지로 데이터 타입으로 사용 가능메소드
선언 가능오버라이딩
해야한다예시
interface Student {
stdId: number;
stdName?: string;
age?: number;
gender?: string;
course?: string;
completed?: boolean;
// setName(name: string): void;
setName: (name: string) => void; // 함수 이름을 변수의 프로퍼티로 사용
}
class MyStudent implements Student {
stdId = 91011;
stdName = 'park';
age = 30;
gender = 'male';
course = 'node.js';
completed = true;
setName(name: string): void {
this.stdName = name;
console.log('이름 설정 :' + this.stdName);
}
}
const myInstance = new MyStudent();
myInstance.setName('엘리스');
// 이름 설정 : 엘리스
사용자 정의 타입이며, 사용자가 정의한 특정 값 이외의 값들을 사용하지 못하도록한다
숫자 열거형 예시
// typescript
enum GenderType {
Male,
Female,
GenderNeutral,
}
// javascript
var GenderType;
(function (GenderType) {
GenderType[GenderType["Male"] = 0] = "Male";
GenderType[GenderType["Female"] = 1] = "Female";
GenderType[GenderType["GenderNeutral"] = 2] = "GenderNeutral";
})(GenderType || (GenderType = {}));
문자열 열거형 예시
// typescript
enum GenderType {
Male = 'male',
Female = 'female',
GenderNeutral = 'neutral',
}
// javascript
var GenderType;
(function (GenderType) {
GenderType["Male"] = "male";
GenderType["Female"] = "female";
GenderType["GenderNeutral"] = "neutral";
})(GenderType || (GenderType = {}));
특정 값을 나타내는 타입으로 해당 값이 정확하게 일치해야한다
let status = 'success' | 'error';
status = 'success'; // 유효
status = 'pending'; // 에러 발생 : 'pending'은 허용되지 않는다
let status = 50 | 100;
status = 100; // 유효
status = 150; // 에러 발생
let status = true;
status = true; // 유효
status = false; // 에러 발생
let person = {name: 'John', age: 30};
status = {name: 'John', age: 30}; // 유효
status = {name: 'Alice', age: 25}; // 에러 발생
type CardinalDirection = 'North' | 'Ease' | 'South' | 'West';
let direction: CardinalDirection;
direction = 'North'; // 유효
direction = 'Northeast'; // 에러 발생 : 'Northeast'는 허용되지 않음
모든 타입을 허용할 수 있는 타입
제한된 타입을 동시에 지정하고 싶을 때 사용한다
|
기호를 사이에 두고 동시에 타입을 지정할 수 있다number
나 string
타입 중 아무 타입의 값이 올 수 있다예시
let anyVal : number | string;
반복되는 타입들을 재사용하기 위해 타입을 재정의한다
예시
type strOrNum = number | string;
let numStr: strOrNum = '100';
typeof 연산자를 이용하여 타입 검증을 수행
예시
type strOrNum = number | string;
let numStr: strOrNum = '100';
let item: number;
function convertToNumber(val: strOrNum): number {
// typeof operator
if (typeof val == 'string') {
item = 0;
} else {
item = val;
}
return Number(val);
}
예시
// Array
let numbers: number[] = [1, 2, 3, 4, 5];
let fruits: string[] = ['apple', 'banana', 'orange'];
// Tuple
//튜플 : 여러 타입을 가진 배열이며, 타입의 순서가 정해져 있다
let greeting: [number, string, boolean] = [1, 'hello', true];
클래스란, 연관된 변수와 메소드(함수)들을 한 덩어리로 묶은 사용자 정의 타입
prvate 접근 지정자의 프로퍼티에 접근하고 설정하기 위해 사용
get
과 set
을 이용한 메소드를 통해 프로퍼티에 접근할 수 있도록 함으로써, 객체지향의 캡슐화를 구현할 수 있다Getter(접근자)과 Setter(설정자) 예시
class Employee {
constructor(
private _empName: string, // 암묵적 클래스의 멤버변수로 선언
private _age: number,
private _empJob: string
) {}
get empName() {
return this._empName;
}
set empName(val: string) {
this._empName = val;
}
printEmp = (): void => {
console.log(`${this._empName}의 나이는 ${this._age}이고, 직업은 ${this._empJob}입니다.`);
};
}
let employee1 = new Employee('kim', 20, 'developer');
console.log(employee1.empName);
//
접근 지정자를 생성자의 매개변수에 작성함으로써, 속성으로 자동 선언하고 초기화할 수 있다
변경 전
class Employee {
private _empName: string;
private _age: number;
private _empJob: string;
constructor(empName: string, age: number, empJob: string) {
this._empName = empName;
this._age = age;
this._empJob = empJob;
}
}
변경 후
class Employee {
constructor(
private _empName: string, // 암묵적 클래스의 멤버변수로 선언
private _age: number,
private _empJob: string
) {}
}