Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(utils): contain 신규 유틸 함수 추가 #198

Merged
merged 2 commits into from
Jun 4, 2024
Merged

Conversation

ssi02014
Copy link
Contributor

@ssi02014 ssi02014 commented Jun 3, 2024

Overview

Issue: #196

첫 번째 인자로 넘긴 배열에 특정 요소가 포함되어 있는지 판단하는 유틸 함수입니다.

includes는 as const를 활용 했을 때, 타입이 호환되지 않은 요소가 포함되어 있는지 확인 할 때 타입 에러가 발생하는 문제점을 some 메서드를 활용해 개선한 함수입니다.

const test = (value: number) => {
  const arr = [1, 2, 3, 4] as const;
  arr.includes(value); // 'number' 형식의 인수는 '1 | 2 | 3 | 4' 형식의 매개 변수에 할당될 수 없습니다.
};

some 메서드를 통해 요소가 포함되어 있는지 판단 할 때 기본적으로 Object.is 메서드를 활용합니다. 단, 필요 시에 3번째 인자로 comparator 함수를 활용 할 수 있습니다.

Object.is를 활용한 이유는 == 보다는 엄격하게 관리되며, ===보다 조금 더 개발자가 기대하는 결과를 가져옵니다. 예를 들어 ===과 비교해서 NaN은 같다고 판단하며, -0과 +0은 서로 다르다고 판단합니다.

-0 === +0 // true
Object.is(-0, +0); // false

NaN === NaN; // false;
Object.is(NaN, NaN); // true
Object.is(NaN, 0 / 0); // true

react 팀의 경우에도 의존성 배열 등과 같이 특정 요소들을 비교 할 때 Object.js를 활용합니다.
https://github.com/facebook/react/blob/main/packages/shared/objectIs.js
https://github.com/facebook/react/blob/main/packages/shared/shallowEqual.js

PR Checklist

  • All tests pass.
  • All type checks pass.
  • I have read the Contributing Guide document.
    Contributing Guide

@ssi02014 ssi02014 added feature 새로운 기능 추가 @modern-kit/utils @modern-kit/utils labels Jun 3, 2024
@ssi02014 ssi02014 requested a review from Sangminnn June 3, 2024 14:51
@ssi02014 ssi02014 self-assigned this Jun 3, 2024
Copy link

changeset-bot bot commented Jun 3, 2024

🦋 Changeset detected

Latest commit: 5271343

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@modern-kit/utils Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

codecov bot commented Jun 3, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 95.59%. Comparing base (5679d43) to head (5271343).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #198      +/-   ##
==========================================
+ Coverage   95.57%   95.59%   +0.02%     
==========================================
  Files          82       83       +1     
  Lines         836      840       +4     
  Branches      196      197       +1     
==========================================
+ Hits          799      803       +4     
  Misses         31       31              
  Partials        6        6              
Components Coverage Δ
@modern-kit/react 92.16% <ø> (ø)
@modern-kit/utils 100.00% <100.00%> (ø)

Copy link
Collaborator

@Sangminnn Sangminnn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지나가면서 이야기나온 부분을 유틸함수로 만들어주셨군요!
타입적으로 보완된 코드이면서 간단한 비교뿐 아니라 comparator도 활용할 수 있는 점이 너무 좋네요!
테스트케이스랑 코드 다 너무 좋아보입니다. 고생 많으셨습니다 👍x100

@ssi02014 ssi02014 merged commit 8c1b5fa into main Jun 4, 2024
3 checks passed
@ssi02014 ssi02014 deleted the feat/contain branch June 4, 2024 05:08
@github-actions github-actions bot mentioned this pull request Jun 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 새로운 기능 추가 @modern-kit/utils @modern-kit/utils
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants