typescript
-
keyof 연산자, 타입 변환기typescript 2022. 1. 19. 22:58
1) key of는 interface나 객체 타입 alias에서 key값을 전부 뽑아내어 유니언타입으로 만드는 연산자이다. 예시를 보자. Person1이라는 interface의 객체 타입의 key값들을 전부 뽑아내어 유니언 타입으로 만든다. 해당 유니언 타입 안에 각 타입은 프로퍼티 key값의 리터럴로 정해진다. 즉, "age" | "name" 이렇게된다. 그리고 interface가 아니고 객체 type alias도 keyof 연산이 가능하다. 원래 타입의 프로퍼티 key값 리터럴을 모아놓은 유니언 타입과 일치하지않으면 저렇게 에러가난다. 2) Mapped Types 이라고 기존 타입을 복사해 프로퍼티의 타입만 바꾼 새로운 타입을 만들 수 있다. [key in keyof T] 이게 핵심인데, 제네릭으로 ..
-
tuple 타입이란.typescript 2022. 1. 19. 19:46
tuple 타입은 타입스크립트에서 배열 타입에 지정해줄 수 있는 배열 타입의 한 종류이다. 배열에 number와 string 둘 중 하나가 들어오는 배열의 타입은 이렇게 정의한다. 그러나 만약 배열의 인덱스마다 들어올 타입을 정하고싶다면 이렇게 정의해줄 수 있다. 이 배열의 길이는 2이며 0번째 인덱스에는 number, 그 다음은 string이 들어온다. 만약 저렇게 고정된 타입을 가진 인덱스들 뒤에 추가로 가변적인 배열을 넣고싶다면 spread operator와 함께 쓸 수 있는데, 무조건 들어와야할 파라미터 뒤에 가변적으로 들어오는 파라미터를 저렇게 받아준다. 즉, 위 사진처럼 ...타입명[] 으로 길이가 정해지지않은 특정 타입의 파라미터들을 추가할 수 있다. 또한 tuple 타입을 지정할 때 옵션인..
-
타입스크립트의 제네릭이란.typescript 2022. 1. 19. 17:06
타입스크립트에서는 클래스나 함수의 생성자 또는 인자 파라미터 옆에 있는 제네릭 으로 클래스와 함수 내부에 타입을 전송해줄 수 있다. 이를 통해 함수 호출이나 클래스로 객체를 만들 때, 타입을 안으로 전송하여 내부에서 전송된 타입을 사용가능하게한다. 하지만 number 타입만 가능한 숫자 연산, string, array 타입만 사용 가능한 length 프로퍼티, 혹은 다른 자료형, 타입에서 고유로 존재하는 기능을 사용하려고했을 때, 클래스나 함수 내부의 기준에서는 으로 지정한 제네릭 타입에 어떤 타입이 들어올것인지 확실하지가않기에 저렇게 에러가 나온다. 즉, 파라미터가 (x: string) 으로 직접적인 타입 설정이됐다면 문제가 나지않지만, 결국 MyType은 함수 호출 시 제네릭으로 타입을 입력받기때문에..
-
타스에는 자바처럼 접근 제한자를 사용가능하다.typescript 2022. 1. 18. 22:54
1) 타스는 자바처럼 public, private, protected 접근 제한자를 쓸 수 있고 심지어 static도 가능하다. 하나씩 살펴보자. 먼저 public은 기본적으로 아무런 접근제한자를 붙이지않아도 설정돼있는 접근제한자이다. public 이라는 이름답게, 외부에서 접근이 가능하기때문에 인스턴스를 만들고 public으로 지정된 프로퍼티를 직접 접근, 수정해줄 수 있으며 public 함수를 호출해 실행할 수 있다. 추가로 public 필드값은 코드 축약이 가능한데, 생성자 내부에 this.필드값명 = 파라미터를 적어주는 작업과 생성자 위에 필드값 이름을 적어주지않고 이렇게 생성자 파라미터에 public을 지정하는것으로 해당 작업 생략이 가능하다. 2) 반면 private은 class 코드 내부에서..
-
typescript의 never타입이란.(짧)typescript 2022. 1. 18. 21:44
never타입은 타입스크립트에서 뭔가 이상하게 설계된 함수의 return 타입 또는 절대 닿을 수 없는(unreachable)한 코드 변수의 타입이다. 함수의 경우 정상적으로 함수가 끝나지않거나 함수의 내부 반복문 조건식이 영원히 true 이어서 함수 종료가 불가능한 경우 return이 자동적으로 never로 지정된다. 특히 컴퓨터는 함수 내부에서 throw new Error( ) 코드를 만나면 함수 내부에 에러가있다고 판단하고 함수를 강제로 종료시키는데, 함수 몸통 코드가 전부 실행되거나 return을 만나서 함수가 종료되는게 아닌 저런 비정상적인 방법으로 강제 종료될 경우 함수가 표현식으로 작성됐을 때 return 타입은 never로 지정된다. 개발자가 타입을 never로 지정해줄 경우는 거의 없지만..
-
타입스크립트의 interface란.typescript 2022. 1. 18. 13:01
1) 타스의 interface는 객체 자료형에 타입을 지정해 줄 수 있는 type이다. type alias와 비슷하게 타입을 지정해주는 역할을 하며, 관행적으로 첫 알파벳을 대문자로 사용한다. 일반 type과 다른 점은, interface는 객체 자료형에만 타입을 지정할 수 있으며, interface 이름 = { } 이런 구조를 취하지않는다. 즉, = 가 없다. 보는 바와 같이 타입 지정 대상이 객체 자료형이 아니면 사용이 불가능하다. 반면, type은 이런 형식이 가능하다. 2) interface의 장점을 알아보자. 우선 extends 문법이 가능하다. extends를 해서 상속을 하여, 타입을 합칠 수 있다. 이제 Teacher 이라는 interface는 name과 age를 모두 가진 interfac..
-
클래스에 타입을 지정해보자.typescript 2022. 1. 18. 11:45
1) 자바스크립트에서 클래스를 만들 때 필드값이라는것이있다. 자바같은 객체지향 언어에서 클래스나 인스턴스가 가지는 프로퍼티인데, 이 필드값은 뭐 멤버변수라고도하고 다양한 이름으로 부른다. 사진의 name과 age가 필드값인데 이 값들은 인스턴스를 만들 때 해당 객체가 직접 소유하는 프로퍼티가된다. 이렇게 해당 객체가 name과 age를 직접 물려받는다. 생성자로 값을 물려주는것과 똑같다. 다만, 생성자로 필드값을 만드는것은 파라미터로 동적인 값을 부여할 수 있고 저렇게 필드값을 직접 작성해주는것은 동적인 값을 부여할 수 없다는 그 차이밖에 없다. 2) 참고로 생성자와 직접 지정한 필드값의 이름이 같다면 생성자의 값이 우선으로 부여됨을 알아두자. 어쨌든 타입스크립트에서는 생성자에 값을 지정하려면 저렇게 에..