일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 크롤링
- TCP
- 타입 챌린지
- 백준
- dp
- 수학
- 가천대
- type challenge
- Crawling
- 프로그래머스
- 소켓
- 그래프
- 타입스크립트
- Node.js
- Nestjs
- 프로그래머스 레벨 2
- 레벨 1
- dfs
- HTTP
- 자바스크립트
- ip
- javascript
- BFS
- Algorithm
- 문자열
- HTTP 완벽 가이드
- 쉬운 문제
- socket
- typescript
- 알고리즘
- Today
- Total
목록프로그래밍/TypeScript (65)
kakasoo
타입스크립트에서 제너릭으로 받은 타입 T, P… 등등은 일반적으로 타입 파라미터라고 부른다. 그 이유는, 제너릭이 타입을 매개변수로 받아 타입에 따른 클래스와 함수를 정의하기 때문이다. 이렇게 제너릭을 활용하면 코드를 추상적으로 작성 가능해져 타입 별로 코드를 구현할 필요가 없게 된다. type Push = [...T, value]; 이 Push 라고 하는 타입은 T와 value 라는 타입 파라미터를 받는다. 이번에 구현할 Push 타입은 Array.prototype.push와 같이, 타입에 새로운 타입인 value를 확장하는 타입이다. 기존의 push 메서드는 push 연산 이후의 배열이 어떤 상태인지, 타입 레벨에서의 추론이 동작하지 않는다. 첫번째 타입 파라미터 T는 any[]를 확장하며, valu..
type Length = T['length']; 타입 레벨에서의 extends 키워드는 타입 상속을 의미한다. 타입 A가 B를 상속할 때, A는 B의 모든 프로퍼티와 메서드를 상속받아야 하는데, 조건문의 의미로도 쓰인다. A가 B를 상속받는다는 것은 최소한 A가 B와 같거나, B보다 더 구체적인 ( = 더 많은 프로퍼티를 가진 ) 것이다. 위의 Length는, 생각보다 별 거 아닌 게, 제너릭으로 받은 T는 any[]를 상속받으니 즉 어떠한 배열을 의미한다. T가 배열이라면 반드시 내부에 length 프로퍼티가 있기 때문에, T[’length’]로 특정 프로퍼티를 뽑을 수 있다. type Length = T['length']; type A = Length; const length: A = 5; // 5가..
// Extract type a = 'a'|'b'; type b = Extract // 'a' type c = Extract // 'a' | 'b' Type에서 Union에 할당할 수 있는 모든 Union 멤버를 추출하여 유형을 구성한다. 위 코드에서는 a 로부터 두번째 타입 인자로 받은 Union에 할당 가능한 대상을 각각 추출한 것이다. a로부터 ‘a’ 상수 타입에 들어갈 수 있는 것은 ‘a’ 상수 타입 뿐이며, string 타입에 들어갈 수 있는 건 ‘a’, ‘b’ 모두다.
싱글턴 패턴은 한 클래스의 인스턴스가 하나만 존재하도록 강제하는 패턴이다. 이런 패턴은 동일한 기능을 하는 여러 인스턴스가 생성되는 것을 막아 메모리 낭비를 줄이기 위해 사용된다. 간혹 우리가 데스크탑의 파일을 여러 번 클릭할 때, 파일이 한 번만 열리는 경우가 있는데 이런 게 싱글턴이다. 다른 객체지향 언어에서는 이걸 구현하기 위해 여러 줄의 코드를 작성하지만, node.js에서는 한 줄로도 된다. export default new (class singleton {})(); node.js에서는 이처럼, 파일에서 다른 파일로 내보낼 때 이미 생성된 인스턴스를 내보내기만 하면 된다. 이러면 어느 파일에서 부르든 동일한 객체를 가져오기 때문에 싱글턴과 동일한 효과를 낼 수 있다. 하지만 자바스크립트는 클래스..
export interface Type extends Function { new (...args: any[]): T; } NestJS Swagger Library에는 위와 같은 interface가 정의되어 있다. 이 타입은 신기하게도 내부에 new 키워드를 사용하고 있으며, 전개연산자와 제너릭을 모두 쓰고 있다. 이 인터페이스를 어떻게 해석하면 좋을까? 단계를 나눠서 차례대로 설명하면 아래처럼 표현할 수 있다. // NOTE 1 interface MyType extends Function { keyName: 'kakasooFunction'; } 임시로 MyType이라는 interface를 만들었다. 이 인터페이스는 Function 이라는 인터페이스를 확장하여 keyName이라는 프로퍼티를 가지고 있다. ..