let status : 'success' | 'error';
status = 'success'; // 유효
status = 'pending'; // 에러 : 'pending'은 허용되지 않음
let speed : 50 | 100 | 200;
speed = 100; // 유효
speed = 150; // 에러 : 150은 허용되지 않음
let isTrue : true;
isTrue = true; // 유효
isTrue = false; // 에러 : false는 허용되지 않음
let person : { name : 'John', age : 30 };
person = { name : 'John', age : 30 }; // 유효
person = { name : 'Alice', age : 25 }; // 에러 : 값이 일치해야 함
type CardinalDirection = 'North' | 'East' | 'South' | 'West';
let direction : CardinalDirection;
direction = 'North'; // 유효
direction = 'Northeast'; // 에러 : 'Northeast'는 허용되지 않음
const user : { name : string, age : number }= {
name : 'hanbirang',
age : 23
};
객체의 프로퍼티도 타입 명시 가능함.
let anyVal : any = 100;
anyVal = 'lim';
anyVal = true;
// 오류 발생하지 않음
let anyVal : number | string;
| 기호를 사이에 두고 동시에 타입을 지정할 수 있음.let anyVal : number | string = 100;
anyVal = 'lim';
anyVal = true; // 에러 : boolean 타입은 오류 발생함.
let numStr : number | string = '100';
function convertToString(val : number | string) : string {
// return 'lim';
return String(val); // val이라는 값을 string으로 변환시켜서 return함
}
function convertToNumber(val : number | string) : number {
// return 100;
return Number(val); // val이라는 값을 숫자로 변환시켜서 return함
}
console.log(convertToString(numStr)); // 문자열 100
console.log(convertToNumber(numStr)); // 숫자 100
type strOrNum = number | string;
let numStr : strOrNum = '100';
function convertToString(val : strOrNum) : string {
// return 'lim';
return String(val); // val이라는 값을 string으로 변환시켜서 return함
}
function convertToNumber(val : strOrNum) : number {
// return 100;
return Number(val); // val이라는 값을 숫자로 변환시켜서 return함
}
console.log(convertToString(numStr)); // 문자열 100
console.log(convertToNumber(numStr)); // 숫자 100
let numStr : strOrNum = '100';
let item : number;
item = numStr; // 오류 발생 큰 범위에서 작은 범위에 대입하는 것은 옳지 않음
type strOrNum = number | string;
let numStr : strOrNum = '100';
let item : number;
function convertToString(val : strOrNum) : string {
// item = numStr; 오류 발생 큰 범위에서 작은 범위에 대입하는 것은 옳지 않음
// typeof operator
if (typeof val === "string")
item = 0;
else
item = val;
return String(val); // val이라는 값을 string으로 변환시켜서 return함
}
let numbers : number[] = [1, 2, 3, 4, 5];
let fruits : string[] = ['apple', 'banana', 'orange'];
for(let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
for(let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
// 배열의 유니온 타입
let mixedArray : (number | string)[] = [1, 'two', 3, 'four'];
for (let i = 0; i < mixedArray.length; i++) {
console.log(mixedArray[i]);
}
let infer = [1, 2, 3]; // 타입 추론
for (let i = 0; i < infer.length; i++) {
console.log(infer[i]);
}
let readOnlyArray : ReadonlyArray<number> = [1, 2, 3]; // 읽기 전용, 수정 불가
// 튜플 (자바스크립트에서는 없는 데이터 타입) : 타입의 순서가 정해져있다.
let greeting : [number, string, boolean] = [1, 'hello', true];
for (let i = 0; i < greeting.length; i++) {
console.log(greeting[i]);
}
let firstArray = [1, 2, 3];
let secondArray = [4, 5, 6];
let combineArray = [...firstArray, ...secondArray];
for (let i = 0; i < combineArray.length; i++) {
console.log(combineArray[i]);
}
// 멤버 변수 == 속성 == 프로퍼티
// 멤버 함수 == 메소드
class Employee {
empName : string;
age : number;
empJob : string;
printEmp = () : void => {
console.log(`${this.empName}의 나이는 ${this.age}이고, 직업은 ${this.empJob}입니다.`);
}
}
let employee1 = new Employee();
employee1.empName = 'lim';
employee1.age = 21;
employee1.empJob = 'developer';
employee1.printEmp();
프로퍼티의 초기값들을 생성자를 이용해서 설정할 수 있음. 모든 클래스는 생성자라는 메소드를 가질 수 있음. 타입스크립트에서는
constructor이름을 사용함
class Employee {
empName : string;
age : number;
empJob : string;
constructor(empName : string, age : number, empJob : string) {
this.empName = empName;
this.age = age;
this.empJob = empJob;
}
}
let employee1 = new Employee('lim', 21, 'developer');
선택적 optional 기호를 사용하려면 그 기호 아래에 있는 매개변수 모두 물음표를 적어줘야 함.
constructor(empName : string, age? : number, empJob? : string) {
this.empName = empName;
this.age = age;
this.empJob = empJob;
}
public private protected: 데이터 접근을 제한하기 위해 사용
일반적으로 멤버 변수는private로 설정하여 외부에서 접근하지 못하도록 함
메소드를 통해서만 접근 가능
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;
}
}
let employee1 = new Employee('lim', 21, 'developer');
// employee1.empName = 'hanbi'; // private이라 에러 발생
private으로 설정된 멤버 변수에 접근할 수 있도록 해줌.
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;
}
// get / set
get empName() {
return this._empName;
}
set empName(val : string) {
this._empName = val;
}
}
let employee1 = new Employee('lim', 21, 'developer');
employee1.empName = 'hanbi';
멤버 변수 선언과 생성자 부분에서 코드가 겹치므로 이를 한 번에 합칠 수 있음.
class Employee {
constructor(
private _empName : string,
private _age : number,
private _empJob : string
) {
}
}