sbyeol3/articles

[번역] null을 ES6 Symbols로 대체하세요

Closed this issue · 0 comments

원문 : Replace null with ES6 Symbols

작은 사이드 프로젝트 라이브러리 작업을 할 때 missing value를 표현해야 했습니다. 과거에는 간단한 세팅을 하거나 더 많이 제어하기 위해 Option을 통해 nullable한 접근법을 사용했습니다. 이 경우에는 둘 다 맞지 않아서 다른 방법을 생각했습니다.

왜 Nullable은 충분하지 않은가

Nullable은 값이 존재할 때 그 값은 문자열, 숫자, 또는 객체임을 의미합니다. 값이 없을 때 우리는 null이나 undefined를 사용하죠.

팁: 타입스크립트에서 nullable types로 작업할 때 strictNullChecks 옵션을 켜두세요.

이 방식은 종종 괜찮습니다. 일반적으로 괜찮지 않은 두 가지 경우가 있습니다.

  1. 값이 null이나 undefined가 될 수 있을 때. 결국 이 값들은 유효한 자바스크립트 원시값이고 사람들은 다양하게 이 값들을 사용합니다.
  2. 더 복잡한 로직을 만들고자 할 때 x == null을 추가하는 것은 귀찮은 일입니다.

많은 경우에서 Promise의 출력값을 제어하고 어떤 값을 리턴할 수 있습니다. 그리고 저는 missing된 두 값이 결국 리턴된다는 것을 예견할 수 있었습니다. 일반적으로 문제 1과 2는 동일한 해결법을 가집니다. Option type을 구현하는 라이브러리를 사용하는 것입니다.

왜 Option은 too much한가

(때때로 Maybe라고 불리는) Option 타입은 두 가지 가능성을 가집니다. 값이 없거나(None, Nothing) 값이 있는 경우(Some, Just)이죠.
자바스크립트와 타입스크립트에서 이는 값을 감싸는 새로운 구조를 도입함을 의미합니다. 일반적으로 가능한 속성을 정의하는 tag 프로퍼티가 있는 객체입니다.

이는 타입스크립트에서 얼마나 여러분이 빠르게 Option을 구현할 수 있는지를 보여줍니다.

type Option<T> = { tag: 'none' } | { tag: 'some', value: T }

보통 여러분들은 타입을 정의하고 유용한 유틸을 제공하는 라이브러리를 사용할 것입니다.