Dev/etc. 20

이펙티브 타입스크립트 아이템 51 ~ 62

아이템 51 - 의존성 분리를 위해 미러 타입 사용하기 각자 필요한 모듈만 사용할 수 있도록 구조적 타이핑을 적용 즉, 의존성을 분리해 사용자가 사용에 용이하도록 함 작성중인 라이브러리가 의존하는 라이브러리의 구현과 무관하게 타입에만 의존한다면, 필요한 선언부만 추출하여 작성 중인 라이브러리에 넣는 것(미러링)을 고려해볼 수 있음 다른 라이브러리의 타입 선언 대부분을 추출해야 한다면, 차라리 명시적으로 @types 의존성을 추가하는 것이 나음 유닛 테스트와 상용 시스템 간의 의존성을 분리하는데도 유용 아이템 52 - 테스팅 타입의 함정에 주의하기 헬퍼 함수를 통한 테스팅 // lodash의 map import { map } from "lodash"; // 매개변수, 반환 타입 모두 체크 가능 functi..

Dev/etc. 2023.06.29

이펙티브 타입스크립트 아이템 41 ~ 50

아이템 41 - any의 진화를 이해하기 일반적인 타입들은 정제되기만 하는 반면, 암시적 any와 any[]타입은 진화할 수 있음 function range(start: number, limit: number) { const out = []; // Type is any[] for (let i = start; i < limit; i++) { out.push(i); // Type of out is any[] } return out; // Type is number[] } any를 진화시키는 방식보다 명시적 타입 구문을 사용하는 것이 안전한 타입을 유지하는 방법 아이템 42 - 모르는 타입의 값에는 any 대신 unknown을 사용하기 함수의 반환값에 타입 선언을 강제할 수 없기 때문에, 호출한 곳에서 타입 ..

Dev/etc. 2023.06.28

이펙티브 타입스크립트 아이템 31 ~ 40

아이템 31 - 타입 주변에 null 값 배치하기 한 값의 null 여부가 다른 값의 null 여부에 암시적으로 관련되도록 설계하면 안 됨 API 작성 시에는 반환 타입을 큰 객체로 만들고, 반환 타입 전체가 null이거나 null이 아니게 만들어야 함 클래스를 만들 때는 필요한 모든 값이 준비되었을 때 생성하여 null이 존재하지 않도록 하는 것이 좋음 strictNullChecks는 반드시 필요함 function extent(nums: number[]) { let min, max; for (const num of nums) { if (!min) { min = num; max = num; } else { min = Math.min(min, num); max = Math.max(max, num); } }..

Dev/etc. 2023.06.21

이펙티브 타입스크립트 아이템 21 ~ 30

아이템 21 - 타입 넓히기 넓히기 (widening) 런타임에 모든 변수는 유일한 값을 가진다 타입스크립트가 작성된 코드를 체크하는 정적 분석 시점에, 변수는 '가능한' 값들의 집합인 타입을 가진다 상수를 사용해 변수를 초기화할 때 타입을 명시하지 않으면 타입 체커는 타입을 결정해야 한다 즉, 단일 값을 가지고 할당 가능한 값들의 집합을 유추해야 한다 interface Vector3 { x: number; y: number; z: number; } function getComponent(vector: Vector3, axis: 'x' | 'y' | 'z') { return vector[axis]; } let x = 'x' let vec = {x: 10, y: 20, z: 30} getComponent(..

Dev/etc. 2023.06.15

이펙티브 타입스크립트 아이템 11 ~ 20

아이템 11 - 잉여 속성 체크의 한계 인지하기 구조적 타입 시스템에서 발생할 수있는 오류를 잡을 수 있도록 '잉여 속성 체크' 수행 객체 리터럴을 변수에 할당할 때 함수에 매개변수로 전달할 때 잉여 속성 체크는 할당 가능 검사와는 별도의 과정 타입 단언문을 사용하면 적용되지 않음 인덱스 시그니처를 사용해 속성을 예상할 수 있도록 함 interface Room { numDoors: number; ceilingHeightFt: number; } const r : Room = { numDoors: 1, ceilingHeightFt: 10, elephant: 'present', } // elephant가 없다고 에러가 발생 구조적 타이핑에 의한 오류 const obj = { num..

Dev/etc. 2023.06.12

이펙티브 타입스크립트 아이템 1 ~ 10

아이템 1 - 타입스크립트와 자바스크립트의 관계 이해하기 타입스크립트는 자바스크립트의 상위집합(superset) '정적' 타입 시스템 - 컴파일 시 변수의 타입을 지정하는 것 타입스크립트의 특징 자바스크립트의 런타임 동작을 모델링 함 타입 시스템은 런타임에 오류를 발생시킬 코드를 미리 찾아 냄 모든 오류를 찾아주지는 않고, 의도와 다르게 동작할 수도 있음 타입 체커를 통과하면서도 런타임 오류를 발생시킬 수 있음 아이템 2 - 타입스크립트 설정 이해하기 tsconfig.json에서 설정 tsc --init으로 설정파일 생성 대표적인 설정값 noImplicitAny 변수들이 미리 정의된 타입을 가져야 하는지 여부 제어, Any도 불가능. 타입을 정하지 않았어도 암시적으로 any로 간주하여 오류 발생시킴. 되..

Dev/etc. 2023.06.01

gzip to json javascript

import pako from 'pako' const url = 'http://~~~/test.gz'; const gzToJson = async () => { const { data } = await axios.get(url, { responseType: 'arraybuffer' }); const binaryData = data; const decompressedData = pako.inflate(binaryData); const json = JSON.parse(new TextDecoder().decode(decompressedData)); console.log(json); } BE에서 용량이 큰 JSON 파일을 gzip으로 으로 압축시켜 보내줬을 때 FE에서 압축 해제 후 디코드해서 사용하는 방법

Dev/etc. 2023.04.11

윈도우 11 vscode ssh 연결 방법

윈도우 11 VSCode ssh 연결 방법 개발 환경: 윈도우 11 그램 + 윈도우 11 데스크탑 데스크탑과 랩탑을 둘 다 활용하기 위해, 그램으로 데스크탑 윈도우 서버에 연결하는 과정을 기록 포트는 22번 그대로 썼고, 외부에서 사용할게 아니기 때문에 포트포워딩 안함 1. 윈도우 11 데스크탑 -> 윈도우 서버 설정 설정 -> 앱 -> 선택적 기능 -> 선택적 기능 추가 -> OpenSSH 서버 설치 관리자로 PowerShell 실행 -> Start-Service sshd로 서버 on (Stop-Service sshd로 off 가능) Set-Service -Name sshd -StartupType 'Automatic'로 윈도우 서버 자동으로 켜지게 설정 Get-NetFirewallRule -Name O..

Dev/etc. 2023.02.08