본문 바로가기

IT/typescript33

declare module '*.json' 의미 declare module '*.json' { const json: any export default json} 핵심 의미TypeScript 컴파일러에게 .json 파일을 임포트할 때 어떤 타입으로 처리하라고 알려주는 ambient module 선언 자세히 풀어보면1. declare module '*.json' { … } 의 의미declare module "" { … } 은 TypeScript에 이런 이름의 모듈을 만났을 때, 아래에 정의된 타입 정보를 사용해라 라고 알려주는 구문입니다. 여기서 *.json 패턴은 확장자가 .json인 모든 파일을 가리킨다. 2. 내부 구조const json: any;export default json; 해당 모듈이 기본(default)으로 하나의 json 값을 갖는.. 2025. 8. 6.
[typescript] esModuleInterop 개념TypeScript의 tsconfig.json 설정 중 하나로, CommonJS 모듈을 ES6 스타일로 불러올 수 있도록 도와주는 옵션 기본적으로 TypeScript는 CommonJS 모듈(module.exports = ...)과 ES6 모듈(export default ...)을 다르게 처리해. 그래서 CommonJS로 작성된 라이브러리를 import x from '패키지'처럼 ES6 스타일로 불러오려면 esModuleInterop: true를 설정해야 오류 없이 사용할 수 있어. // esModuleInterop이 false일 때import * as mkdirp from 'mkdirp';mkdirp.sync('path'); // 이렇게 써야 함// esModuleInterop이 true일 때impo.. 2025. 7. 9.
[typescript] WeakRef 개념Weak Reference(약한 참조)는 프로그래밍에서 객체를 참조하되, 가비지 컬렉터(Garbage Collector)에 의해 수거되는 것을 방해하지 않는 참조입니다. 이는 일반적인 참조(strong reference)와는 다르게 동작하며, 주로 메모리 관리와 관련된 특정한 상황에서 유용합니다. 특징 1. 가비지 컬렉션과의 관계약한 참조는 객체가 강한 참조에 의해 더 이상 참조되지 않는 경우, 가비지 컬렉터에 의해 객체가 메모리에서 수거될 수 있도록 허용합니다. 2. 사용 사례캐시(Cache): 메모리 효율성을 위해, 자주 사용되지 않는 데이터를 약한 참조로 보관해 필요 시 재생성하거나 불러오는 구조.리스너 관리: 이벤트 리스너 같은 곳에서 메모리 누수를 방지하기 위해 사용.순환 참조 문제 해결: .. 2024. 12. 28.
[typescript] AtLeastOneRequired AtLeastOneRequired 타입은 특정 객체에서 적어도 하나의 속성이 필수로 존재하도록 강제하는 타입입니다. 이를 구현하려면 TypeScript의 유틸리티 타입과 조건부 타입을 조합하여 각 속성마다 최소 한 개가 필수인 상태를 표현해야 합니다. AtLeastOneRequired 타입 구현type AtLeastOneRequired = { [K in keyof T]-?: Required> & Partial>;}[keyof T]; 동작 원리Mapped Type:K in keyof T를 통해 각 속성 K를 반복합니다.이때, Pick를 사용하여 속성 K만 포함된 객체를 만듭니다.Required>는 해당 속성을 필수로 지정합니다.Partial Omit:Omit를 사용하여 나머지 속성들을 제외합니다.Part.. 2024. 12. 16.
[typescript] -? 의미 아래의 코드에서 `-?` 는 무슨 의미인지 알아보자type Required = { [P in keyof T]-?: T[P];} 의미TypeScript에서 -?는 옵셔널 속성을 제거하는 데 사용되는 문법`?`는 Mapped Types에서 사용되며, ? (옵셔널 속성 표시)를 제거해 해당 속성을 반드시 포함해야 하는 속성 (Required)으로 변환합니다. 이를 통해 옵셔널 속성을 강제적으로 필수 속성으로 바꿀 수 있습니다. Exampletype Test = { a?: string; // optional b: number; // required};type RequiredTest = { [P in keyof Test]-?: Test[P];}; 위 코드를 자세히 보면:Test 타입의 a는 옵셔널 .. 2024. 12. 5.
[typescript] fattenObject 함수 type 만들기 아래 함수에 대해 Type을 정의해보자function flattenObject(obj: any, result: any = {}){ for (let key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) { flattenObject(obj[key], result); } else { result[key] = obj[key]; } } } return result;}const a = { .. 2024. 8. 21.