본문 바로가기

IT/typescript31

[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.
[typescript] infer 개념조건부 타입에서 사용하는 기능으로, 컴파일러가 특정 타입을 추론하도록 도와주는 역할infer를 이용해 타입 시스템 내에서 타입을 유추하고, 그 유추된 타입을 다른 타입 계산에 활용 기본 사용법T extends U ? X : Y `T`가 `U`를 상속하거나 extends 하면 타입 `X`를 사용하고, 그렇지 않으면 타입 `Y`를 사용. 이 패턴에서 `infer`를 사용하면 `T`의 일부 타입을 유추하고 이를 타입 시스템 내에서 사용 할 수 있다. 예제type MD = T extends (...args: any[]) => infer R ? R : any;type D = MD number> //type: numbertype E = MD //type: any `MD`는 함수 타입 `T`의 반환 타입(retu.. 2024. 8. 14.
[typescript] 함수타입(Function Type) 인자형 이게 왜 가능하지?processNumberAndString에서는 string을 받을 수도 있는데, number만 받는 wide에 넣었더니 문법 오류가 나지 않는것일까? function processNumber(x:number) {}function processNumberAndString(x:number | string) {}let wide: (x:number) => voidwide = processNumber // Works!wide = processNumberAndString // Works! when A ≤ B, A → X ≥ B → XA가 B의 subtype이고 반환형이 같을 때, B를 인자로 갖는 함수는 A를 인자로 갖는 함수의 서브타입 processNumberAndString에서 number 또.. 2024. 8. 14.