: 타입스크립트는 타입을 따로 표기하지 않으면 코드를 읽고 분석하여 어떤 타입인지 추론한다.
function calculateCodingIQ(lostPoints) {
return 100 - lostPoints;
} // parameter의 타입을 따로 선언하지 않아도 return 값을 분석하여 parameter의 타입이 number임을 예측함.
: 변수를 선언할 때, 변수 값의 타입을 명시함으로써 변수 값의 데이터 타입을 지정하는 것을 의미
문법 : let myname : string = '이승민';
function calculateCodingIQ(lostPoints : number) {
return 100 - lostPoints;
}
: 기존에 존재하는 타입 이외에 내가 속성들, 메서드들을 지정할 수 있는 타입
number
, string
, object
를 타입으로 지정하기 보단 interface
를 이용해 좀 더 명확하게 명시할 필요가 있다.interface Student { // interface는 맨 앞글자를 대문자로!
// 속성을 인터페이스에 정의하는 방법
readonly studentID: number; // 읽기 전용 프로퍼티
studentName: string;
age?: number; // 속성 뒤에 ?를 붙이면 선택적 프로퍼티가 되어 값이 있어도 되고 없어도 되는 값
gender: 'male' | 'female';
subject: string;
courseCompleted:boolean; // 변환되는 객체의 구조 타입으로 지정
// 메서드를 인터페이스에 정의하는 방법 2가지
// addComment (comment: string): string;
addComment?: (comment: string) => string;
}
: 연관된 아이템들을 함께 묶어서 표현할 수 있는 수단
: 타입을 어떠한 값으로 범위를 두고 싶을 때 사용하면 된다.
ex) 성별 속성의 값을 male, female만 들어갈 수 있게 하고 싶을 때
enum GenderType { // 숫자 열거형 - 순서대로 값에 숫자가 들어가게 됨
Male, // 0
Female // 1
}
enum GenderType1 { // 문자형 열거형
Male = 'male', // male 이라는 값
Female = 'female' // female 이라는 값
}
: enum과 비슷한 개념으로 값을 제한하고 싶을 때 사용하는 타입
: |
기호를 사용하여 값을 구분하면 된다!
interface Student {
gender: 'male' | 'female'; // | 을 사용하여 값을 구분함
}
: 어느 타입의 값이든 상관없는 타입
⇒ 만약 어떤 타입을 선언해야하는지 모를 때만 사용하도록 하자!
let someValue : any = 5;
someValue = 'hello'; // 아무런 에러 X
: 제한된 타입들을 동시에 지정하고 싶을 때 사용하는 타입
let price: number | string = 5; // | 으로 타입을 구분함
price = 'free';
let totalCost: number;
let orderID: number | string;
const calculateTotalCost = (price: number | string, qty: number) : void => {
};
const findOrderID = (customer: { costomerId: number | string, name: string}) : number | string => {
return orderID;
}
같은 코드를 반복하는 것보다는 코드를 타입으로 지정하여 재활용!
⇒ Type Alias (타입 별칭)을 사용하자!
type StrOrNum = string | number; // type 선언
const calculateTotalCost = (price: StrOrNum, qty: number) : void => {
};
const findOrderID = (customer: { costomerId: StrOrNum, name: string}) : StrOrNum => {
return orderID;
}
: union 타입을 사용할 때 코드 검증을 수행하는 것
let itemPrice: number;
const setItemPrice = (price: StrOrNum): void => {
// price의 값이 string도 될 수 있고, number도 될 수 있기 때문에
// 타입별로 조건을 달아줘야한다. -> typeOf Operator 사용
if (typeof price === 'string') {
itemPrice = 0;
} else {
itemPrice = price;
}
}
setItemPrice(50);
선택적 매개변수
: 매개변수 뒤에 ?를 붙이면 매개변수로 넣어도 되고 넣지 않아도 되는 매개변수가 되버린다.
기본 매개변수
: 매개변수에 default 값을 주고 싶다면 :을 사용하여 값을 넣으면 된다.
(이때는 타입을 지정해도 되고 안해도 됨 : 타입 추론함)
// 기본 매개변수
const sendGreeting = (message = 'Hello', userName = 'there'): void => {
console.log(`${message}, ${userName}`);
}
sendGreeting(); // Hello, there
sendGreeting('Good morning'); // Good morning, there
sendGreeting('Good afternoon', 'Jenny'); // Good afternoon, Jenny
// typescript compiler는 함수 호출 시 실행되는 함수의 매개변수와 전달하는 argument를 비교 검사한다.
// 그래서 인수와 매개변수가 맞지 않으면 오류를 발생시킴.
// 선택적 매개변수
const sendGreetingBefore = (message: string, userName?: string): void => {
console.log(`${message}, ${userName}`);
}
각각의 객체는 속성과 행동을 가지고 독립적인 개체가 되기도 한다.
인간이라는 커다란 범주 안에 속한다.
: 연관된 변수와 함수들을 한 덩어리(객체) 로 묶어서 객체들이 서로 상호작용함으로써 시스템이 동작하는 프로그래밍 스타일
: 객체의 뼈대, 설계도, 생산틀
class Employee { // 첫 글자는 대문자!
...
}
: 클래스를 통해서 만들어질 수 있음
// 인스턴스 객체 생성
let employee1: Employee = new Employee('승민', '풀스택 개발자', 40, 35);
: 객체가 생성될 때 실행되는 함수
constructor (
// Property
// constructor의 매개변수에 접근 제어자 직접 적용하면 코드를 줄일 수 있음.
private _fullName: string, // _를 붙이면 암묵적으로 private (약속)
private _jobTitle: string,
private _hourlyRate: number,
public _workingHoursPerWeek: number,
private _age?: number,) {
}
this
키워드를 이용해 클래스의 프로퍼티에 접근이 가능하기 때문이다.printEmployeeDetails = (): void => {
console.log(`${this.fullName}의 직업은 ${this._jobTitle}이고
일주일의 수입은 ${this._hourlyRate*this._workingHoursPerWeek} 달러이다.`)
}
: 클래스 속 멤버 변수와 메서드에 적용될 수 있는 키워드
: 클래스 외부로부터의 접근을 제어
외부에서 private으로 지정한 멤버 변수를 가져오려고 할 때
get fullName () { // getter
return this._fullName
}
set fullName (value: string) { // setter
this._fullName = value;
}
employee1.fullName = '민수'; // setter를 이용한 코드 (메서드를 마치 프로퍼티처럼 접근 가능)
console.log(employee1.fullName); // getter를 이용한 코드
제가 정말 강추하는 강의입니다! 도움이 많이 되었어요 😭