본문 바로가기

typescript

[Typescript] RegExp의 함수를 사용할 때 주의할 점 서론 Typescript나 Javascript에서 RegExp 객체를 변수화한 뒤에 test()나 exec() 함수를 사용할 때는 특별히 주의할 점이 있다. 바로 lastIndex. 정규표현식을 사용할 때 flag로 넣을 수 있는 옵션 중에 g가 있는데 이것은 전체 찾기를 하겠다는 옵션이다. 이걸 넣어서 사용하면 내부적으로 lastIndex를 사용하게 되는데 lastIndex 속성은 함수를 실행할 때마다 값을 기억하고 다시 시작할 때 그 위치에서 검색을 시작한다. 그러니까 대상자 하나를 가지고 검색할 때는 괜찮을 수 있으나, 단순 검색으로 여러 대상을 가지고 검색을 할 때는 100% 문제가 된다. 원인 위의 코드를 보면 결과값이 true, true, 가 나오는 것으로 기대하지만 실제로는 true, fal..
[Node.js] 상위 Directory까지 한 번에 생성하기 서론 어디든 개발하다보면 File을 써야 할 상황이 온다. 그러면 아무 폴더에다가 저장하지 않고 ~/Documents/upload/image 와 같은 정리된 디렉토리 계층을 사용할 것이다. 문제는 여기서 발생한다. 정리된 디렉토리 계층을 사용하려면 디렉토리가 여러 개가 되어야 하는데 Node.js에서 지원하는 fs.mkdir은 여러 디렉토리를 한 번에 생성해주지 않는다. ~/Documents/upload/image 를 생성해서 사용하려면 ~/Documents는 원래 있는 거니 상관 없고, upload와 image 두 가지 디렉토리를 생성해줘야 한다. 그래서 패키지 mkdirp를 따로 추가하여 사용하고 있었는데 Node.js 10.12 버전부터는 recursive 옵션을 true로 주면 되네? ㅋㅋㅋㅋㅋ ..
[Typescript] 변수 비구조화 (Destructuring) 비구조화란? (Destructuring이란?)Typescript(or Javascript ES6)에서 변수값을 할당해주는데 있어 다른 언어에서는 볼 수 없는 어마무시한 기능이 있는데 바로 비구조화 할당이다. 이게 뭐냐면 변수에 값을 할당을 하면서 구조화되어 있는(Object, Array 등)을 즉각 분리 시켜 변수에 할당해주는 기능이다. 이게 처음 접하는 분들은 무슨 말인지 감이 안 올텐데 예제를 보면 쉽게 알 수 있다.1. Array Destructuringconst [a, b] = [10, 20];이게 뭘까? 보통 언어에서는 저런 문법 자체가 없기 때문에 처음 보면 그냥 작성자의 오타나 일부러 에러를 만들어낸 것 같아 보이는 코드인데 실제로 Javascript나 Typescript에서 동작하는 코드이..
[Node.js] Typescript용 Controller(Like a Spring MVC) 3가지 1. tsoa - https://github.com/lukeautry/tsoa2. Trafficlight - https://github.com/swimlane/trafficlight3. routing-controllers - https://github.com/typestack/routing-controllers4. nest.js(추가함) - https://nestjs.com/셋 중에 난 3번 routing-controllers를 선택했다. star도 많고 코드가 제일 깔끔해보였다. 그리고 이미 typedi하고 연계를 잘 해놔써 typedi를 쓰는 내가 선택할 건 3번 뿐이긴 했다. 혹시나 DI 중에 inversify를 사용한다면 1번 tosa도 고려해볼만 하다. swagger도 지원되고 좋은 듯 싶다. ..
[Angular] TS2339:Property 'curveBasis' does not exist on type 'typeof d3'. Error: Error:(103, 13) TS2339:Property 'curveBasis' does not exist on type 'typeof d3'. Solution: npm install @types/d3 --save-dev
[Angular] Typescript로 다른 Router-Outlet의 화면 변경하기 가끔 여러 개의 Router-Outlet을 선언해서 사용해야 할 때가 있다. 여러 개를 선언하면 어느 Router-Outlet의 페이지를 변경시킬 것인지 명시를 해줘야 하는데 아래와 같이 사용하면 된다. 선언 이 이런 식으로 선언되어 있다고 가정했을 때, 아래와 같이 사용하면 된다. navigate 사용 방법this.router.navigate( [ `./`, { outlets: { 'headerOutlet': 'header11' } } ] );아 참고로 header11이 path이다. 그리고 router 객체를 가져오는 건 provider를 이용하면 된다.