우아한 테크코스 2주차 입니다. 이번 미션에서는 조합과 상속에 대해서 공부했습니다! ❗중복 코드 발생 class Lotto { constructor(numbers) { if (numbers.some((number) => number > MAX_NUMBER || number < MIN_NUMBER)) { throw new Error("로또 번호는 1~45 사이의 정수여야 합니다."); } if (numbers.length !== 6) { throw new Error("로또 번호는 6개여야 합니다."); } if (numbers.length !== new Set(numbers).size) { throw new Error("로또 번호는 중복되지 않아야 합니다."); } this.#numbers = number..
"한빛미디어 서평단 활동을 위해서 책을 제공 받아 작성된 서평입니다." You Don’t Know JS (YDKJS) 책은 익히 들어봤습니다. JS 개발자라면 누구나 한 권쯤 가지고 있을 모던 자바스크립트 Deep Dive 책이 기초적인 JS의 개념을 다룬다면, YDKJS책은 닌자 비급이라 불리는 JS Ninja 라는 책과 더불어 자바스크립트의 조금 더 깊은 이해를 도와주는 필독서로 알고 있었습니다. 하지만 이 두 책은 출판 된지 꽤 시간이 흘렀고, 급격히 변하는 웹 프론트 생태계를 공부하는 와중에 7년이 지난 책을 챙겨 읽을 겨를은 없었습니다. 이번에 그 YDKJS의 두 번째 버전의 책이 나왔다는 소식을 들었을 때 명성 있는 책인 만큼 꼭 읽어보겠노라 다짐했고, 정말 감사하게도 ‘한빛 미디어’에서 책을..
❗문제발생! export default class AppError extends Error { static PREFIX = "[ERROR]"; constructor(message) { super(`\\n${AppError.PREFIX} ${message}\\n`); this.name = this.constructor.name; } } Error를 커스텀하여 사용하기 위해, 다음과 같은 코드를 사용하였습니다. 저는 여기서 static 키워드를 사용 것에 대한 의문을 가졌습니다. 하지만 static을 뺀 아래 코드는 에러가 발생하였습니다. export default class AppError extends Error { PREFIX = "[ERROR]"; constructor(message) { super(..
✨ 선언 파일 타입 선언은 파일 이름이 .d.ts확장자로 끝나는 선언 파일에 작성됩니다. .d.ts 파일에는 사용 가능한 런타임 값, 인터페이스, 모듈, 일반적인 타입 설명만 포함됩니다. 선언 파일은 값이 아닌 타입만 선언할 수 있는 코드 영역을 의미하는 앰비언트 컨텍스트를 생성합니다. ✨ 런타임 값 선언 declare 키워드를 사용해 구조체가 존재한다고 선언할 수 있습니다. 이는 script 태그 같이 외부 작업을 통해 가져온 구조체에 특정 타입의 값을 생성할 수 있습니다. 함수와 클래스도 일반적인 형식과 유사하게 선언되지만, 본문이 없습니다. declare function get() { // ... } // ERROR An implementation cannot be declared in ambien..
✨ 제네릭 타입 별칭 type Nullish = T | null | undefined; 제네릭 판별된 유니언 예시로 데이터의 성공적인 결과 또는 오류로 인한 실패를 나타내는 제네릭 결과 타입을 만들 수 있습니다. type Result = FailureResult | SuccessResult interface FailureResult { error: Error; ok: false; } interface SuccessResult { data: Data; ok: true } function handleResult(result: Result) { if(result.ok){ console.log(result.data) } if(!result.ok){ console.log(result.error) } } ✨ 제네릭..