Typescript 문법

typescript

  • “type”을 가지고 있다.(javascript와의 차이점, java,c와 비슷함)
  • code assistant 활용으로 생산성 향상(vscode에서 지원이 빵빵함)
  • AltJS(javascript의 대체언어)중 하나
  • 기본적으로 ES6기반으로 씀
  • 자체적으로 Babel과 유사한 컴파일러를 가지고 있음

type 지정의 장점

  • 에러를 사전 점검할수 있음

문법

  • 변수 타입 지정을 반드시 해줘야 함
  • 선언과 할당이 함께 되면 타입 지정을 안해줘도 에러가 발생하지않음

정적타이핑

  • 변수의 타입 선언, 지정에 맞는 값을 할당하여 사용하는 것
  • 동적타이핑과 반대개념, javascript는 동적 타이핑 언어이다.
  • 타입에 일치하지 않는 값을 넣었을 때는 에러가 발생(아예 컴파일이 실행 안됨)
  • 타입을 써주면 더 확실하다.
  • 코드 가독성, 예측성, 안정성의 향상의 장점이 있다.

타입추론

  • 타입선언이 생략됐을 때, 선언과 동시에 값을 초기화하지 않으면 any타입이 된다.
  • let foo; // let foo: any와 같음.
  • javascript var키워드와 같이 재할당이 가능함으로 사용하지 않는 편이 좋다.

클래스

  • class body에서 멤버변수를 꼭 선언해야 한다.(ES6은 constructor내부에서만 가능하고 class body에서 선언하면 안된다.)

접근제한자

  • public, protected, private
  • public 어디서든 참조가능, 공개
  • protected 클래스 인스턴스에서 참조불가능, 부분 공개
  • private 클래스 내부에서만 참조가능, 비공개

readonly

  • 상수가 된다.
  • 값을 할당 할 수 없고, 오직 읽기만 가능하다

생성자 파라미터에 접근 제한자 사용

  • 아래 두 경우는 실행 결과가 같다.
1
2
3
4
5
6
7
class Foo{
constructor(public x: string) { }
}
class Foo{
public x: string
constructor(x: string) {//여기서 x는 매개변수(지역변수)로 class body(멤버변수)와 다른 x이다.}
}

추상클래스(Abstract class)

  • 추상 메소드를 포함할 수 있는 클래스.
  • 상속만을 위해 사용된다.
  • 추상 클래스를 상속하는 클래스는 추상 클래스의 추상 메소드를 반드시 “구현”해야 한다.

인터페이스

  • 기계(소프트웨어)와 사용자 간의 접점
  • 옛날은 CLI 명령어으로 컴퓨터에 명령을 함(그래픽으로 처리 한 것은 GUI)
  • 타입 체크를 위해 일반 변수, 함수, 클래스에 사용함(변수에 타입, 함수의 매개 변수 등)
  • 함수의 매개 변수 : 인터페이스 설계대로 리턴타입을 준수해야함
  • interface, implements
  • interface에서 정의된 프로퍼티 전부를 implements한 클래스 내에서 반드시 구현한다.

덕 타이핑

  • 반드시 implements를 쓰지 않아도 interface를 구현한 것으로 인정되는 것
  • implements를 하지않아도 interface에 부합하는 메소드나 프로퍼티를 가지고 있다면 implements된걸로(해당 interface타입을 가지고 있는 것) 인정된다.

선택적 프로퍼티

  • 인터페이스의 프로퍼티 구현 중 프로퍼티명 뒤에 ? 가 붙어있으면 생략해도 에러가 발생하지 않는다.

제네릭

  • : <안에 type을 지정>
  • 클래스를 생성할 때 타입을 지정한다.