Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions contributions/65639.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
pr-url: https://github.com/nodejs/node/pull/65639
---

@greenheadHQ 올려주신 아이디어를 참고해서 typings 관련해 기여했습니다. 감사합니다.

## 문제 내용

최신 Node.js 빌드에서 `internalBinding('zlib')`의 실제 export를 타입 선언과 비교했습니다.

런타임에는 `ZLIB_VERSION`, `ZstdCompress`, `ZstdDecompress`, `crc32`가 존재하지만, `typings/internalBinding/zlib.d.ts`에는 해당 타입이 선언되어 있지 않은 것을 확인했습니다.

## 해결 과정과 검증

C++ 구현과 내부 JavaScript 사용처를 확인해 각 export의 타입을 정의했습니다.

- `ZLIB_VERSION`: 문자열
- `crc32`: 문자열 또는 `ArrayBufferView`를 받아 숫자를 반환
- `ZstdCompress`, `ZstdDecompress`: 기존 압축 스트림과 동일한 base class를 따르는 native stream

런타임 동작은 변경하지 않고 누락된 타입 선언만 추가했으며, `make js-linter`를 실행해 검증했습니다.

해당 PR은 업로드 후 바로 approved 되어 commit queue에 포함되었습니다. 확실히 typings 관련 PR은 리뷰 하기에 부담없는 부분인 것 같습니다.

## 배운 점

Node.js의 native binding은 C++ 구현과 TypeScript 타입 선언이 별도로 관리되기 때문에, 런타임 export가 추가되어도 타입 선언이 함께 갱신되지 않을 수 있다는 점을 배웠습니다.

또한 타입을 추가할 때 이름만 맞추는 것이 아니라 C++의 export 등록 코드와 실제 JavaScript 사용처를 함께 확인해야 정확한 타입을 정의할 수 있음을 알게 되었습니다.