T | null | undefined결측은 타입에 남고 ?.·??는 런타임에서 분기한다
strictNullChecks로 부재를 union에 남긴다. 정상 부재는 기본값으로, 깨진 불변식은 guard·throw·Result로 분리한다.
if (value == null) 뒤 성공 경로는 T
?. 접근왼쪽이 nullish면 해당 optional chain 결과는 undefined
?? 기본값null·undefined만 대체하고 0·빈 문자열·false는 보존
필수값 부재는 throw 또는 tagged union으로 표현
null·undefined를 별도 타입으로 검사하고 control-flow로 좁힌다.
?.와 ??는 JavaScript 연산자로 실제 분기를 수행한다.
non-null !은 emit에서 사라져 런타임 검증이 없다.
중간도 nullable이면 foo?.bar?.baz처럼 표시한다.
foo?.bar / 100은 undefined를 계산에 넣어 strict 오류가 난다.
||로 값 손실0·빈 문자열·false가 유효하면 ??를 사용한다.
설계 기준: Maybe는 TypeScript 내장이 아니다. 먼저 union·guard·tagged union을 쓰고 팀 합의가 있을 때만 별도 추상화를 둔다.