Ts
static type
타입추론
let에 재할당 하려고할때 잘 안된다
타입 표기가 없는경우 타입을 추론한다 변수할당이 숫자였기때문에 변수를 숫자라고 정한다
에러가뜸 타입 추론 규칙에 의거해서
함수 반환값을 알려주지 않더라도 return에 뺄샘 연산자를 통해서 함수에서 반환될 값이 number라는걸 추론할 수 있다.
타입명시
타입명시란 변수를 선언할때 변수값의 타입을 명시함으로써 변수의 타입을 정의
let a:number = "hello"; //컴파일 에러남
let a:number = 4; //정상적으로 작동
// a인자 타입과 함수 반환타입을 적어줌
function myfun(a:number)
:void{
}
왼쪽 보면 number string으로 타입을 명시
함수를 반환할때는 void나 any 타입이외에 다른 타입은 모두 반환해야한다. 꼼수로 다른타입에서 반환할라면 null같은 더미값을 반환하는 것
반환되는 객체의 구조를 타입으로 지정해주면서 좀더 자세한 정보를 전달할 수 있다.
인터페이스
인터페이스로 객체구조 정의하기
복잡한 코드를 좀더 간단하게 만들기
인터페이스 만들기 네이밍 규칙은 처음에 대문자로 해주기
만들어지는 인터페이스는 하나의 타입으로 사용을 가능
이런식으로 타입으로 사용이 가능
인터페이스를 타입으로 가지는 값은 인터페이스의 구조를 그 값으로 가지도록 강제된다 -> 객체안의 값들을 하나도 빠짐없이 가지고 있어야 한다
다음의 getStudentDetails 함수는 age 속성을 가지고 있지 않아 컴파일 에러가 난다.
인터페이스에 ?를 붙이면 있어도 되고 없어도 되는 선택적 속성이 되어 에러가 나지 않는다.
인터페이스 안에 메소드를 추가하는 방법
두가지 표현 모두 같은 표현이다.
읽기전용 프로퍼티
객체생성시 할당된 프로퍼티는 바꿀 수 없다
readonly를 써주기
이런식으로 바꾸려고 하면 빨간줄이 뜨면서 에러가 난다.
실제로 인터페이스는 js로 컴파일할때 아무 영향을 끼치지 않는다 오로지 ts의 사용 편의성을 위해서 사용되어지는 개념
Enum + 리터럴 타입
Enum이란 연관된 아이템들을 함께 묶어서 표현할 수 있는 수단 즉 -> 데이터베이스의 도메인같은 개념
//enum 선언 방법
enum GenderType{
Male,
Female
}
인터페이스에서 gender 값을 enum으로 바꿔주기
인터페이스로 생성된 변수들의 gender값의 값을 enumName.속성
이렇게 바꿔주기
위와 마찬가지
enum은 실제 js 컴파일할때 js 코드로 나타난다.
enum이 runtime에 존재하는 실재 객체라는 의미이다.
0과 1은 enum의 순서에 따라 숫자를 할당해 이를 구분한다는걸 알 수 있다.
실제로는 다음과 같다
이라고 한다.
만약 숫자인 값을 가지는걸 원하지 않는다면 이런식으로 할당하면 된다
오른쪽 js 보면 숫자였던 부분이 string으로 볼 수 있다.
리터럴 타입을 정희하려면 | 를 기준으로 string으로 구분할 수 있다. |
enum처럼 GenderType.female 이렇게 할 필요 없이 그냥 안에 있는 text를 써 넣으면 된다.
유니언타입, 타입가드, 타입별칭
애니타입이란?
어떤 타입이던 값을 할당할 수 있다.
이런식으로 막 할당해도 에러 안뜬다
하지만 타입스크립트는 타입에 관한 더 많은 정보를 명시할수록 좋음… 때문에 애니타입을 최대한 피하자
애니타입을 사용하는 경우는 써드파티 라이브러리에서 값이나 모듈을 받아올때 타입을 알기 어려우니 이런경우 사용한다
유니언 타입이란
만약 변수의 타입의 후보를 긴가민가 하게 알때 -> 숫자 or 문자인걸 무조건 알때 이런식으로 유니언 타입을 이용
let price : number | string = 5; //정상작동
price = 'free' // 정상작동
price = true; // 컴파일 타입 에러
이런식으로 유니언 타입이 반복된다면 코드의 가독성을 어지럽힐 수 있다.
타입 엘리어시스란?
유니언 타입을 변수화 시켜서 가독성과 재사용성을 높여줄 수 있다.
타입가드란?
이 경우 에러가 뜬다…
price는 string or number지만 itemPrice는 number 타입이기 때문에 햇갈릴 수 있기 때문
이런경우는 typeof를 이용해서 코드 검증을 수행할 수 있다.
타입가드란?
typeof를 이용해서 코드 검증을 수행하면 에러가 사라진다.
이런 타입 검증 과정을 타입 가드라고 한다.
함수작성 방식
함수 반환타입 작성하는 방법
매개변수 타입 설정
함수는 실행할때 매개변수와 인자의 타입을 검증하는 과정을 거친다.
정의된 인자는 모두 필요하다고 가정한다
?를 붙이면 선택적 매개변수로 지정
선택적 매개변수는 반드시 필수적 매개변수 뒤에 위치애햐한다!
기본 매개변수 사용방법 뒤에 문자열을 할당해주는것처럼 해준다!
객체지향 프로그래밍 class와 object 관계 파해치기
클라스 속에서 정의된 함수들은 this로 접근이 가능
생성자, 접근제한자, getter, setter
생성자 : 모든 class는 constructor(생성자)를 가진다. constructor은 객체의 초기화를 담당한다.
생성자는 이런식으로 생성이 가능하다.
Employee 안에 생성자를 정의할때 설정해둔 매개변수 형식대로 넣어주면 class가 생성된다.
지금 형식은 생성자 요소를 모두 강제로 할당하고 있다.
생성자를 선택적 생성자로 만든다면 그 뒤에 인자들도 모두 선택적 인자들로 만들어야 에러가 안난다
접근제한자의 종류는 이렇게 3가지가 있다
public의 경우 이렇게 써줘도 좋지만 아무것도 안쓰면 기본값으로 public이 적용된다.
private에 접근하려면 저렇게 에러가 난다.
비공개로 설정된 객체의 값을 변경하거나 값을 사용하기위해서 getter와 setter을 이용할 수 있다.
getter와 setter
_은 비공개 맴버라는걸 암묵적 동의다.
비공개 변수의 값을 얻는 함수는 get, 변경하는 함수는 set으로 정의하면 된다.
괄호없이 변수 참조하듯이 바로 getter를 사용할 수 있다
constructor + 객체에 대한 정의를 좀더 간결하게 정의하는 방법