선택적 속성과 undefined 값을 가진 속성은 비슷해 보이지만 근본적으로 다릅니다. 객체에 속성이 없는 경우, 해당 속성에 접근하면 undefined가 반환됩니다. 마찬가지로 속성이 존재하지만 값이 명시적으로 undefined인 경우에도 해당 속성에 접근하면 undefined가 반환됩니다. 그러나 in 연산자는 근본적인 차이를 드러냅니다: 속성이 없을 때 value in object는 false이고, undefined 값을 가진 속성이 존재할 때 true입니다. TypeScript에서 ?로 표시되는 선택적 속성은 해당 속성이 객체에 존재하지 않을 수 있음을 의미합니다. 이 차이는 속성을 생략하는 것이 "변경 없음"을 의미하지만, 명시적으로 undefined로 설정하는 것은 다른 의도를 나타내는 API에서 중요합니다. exactOptionalPropertyTypes 컴파일러 옵션은 이 차이를 강제하여, 타입에 | undefined가 명시적으로 추가되지 않는 한 선택적 속성에 undefined를 명시적으로 할당하는 것을 허용하지 않습니다. 이러한 정확한 타이핑은 속성 존재가 의미론적 의미를 갖는 구성 객체 및 업데이트 메커니즘에 유용합니다. 예를 들어, 업데이트 함수는 생략된 필드는 무시하지만 undefined로 설정된 필드는 다르게 처리할 수 있습니다. 이 차이를 이해하는 것은 견고한 API 설계와 정확한 객체 조작에 필수적입니다.
in연산자는 근본적인 차이를 드러냅니다: 속성이 없을 때value in object는 false이고, undefined 값을 가진 속성이 존재할 때 true입니다. TypeScript에서?로 표시되는 선택적 속성은 해당 속성이 객체에 존재하지 않을 수 있음을 의미합니다. 이 차이는 속성을 생략하는 것이 "변경 없음"을 의미하지만, 명시적으로 undefined로 설정하는 것은 다른 의도를 나타내는 API에서 중요합니다.exactOptionalPropertyTypes컴파일러 옵션은 이 차이를 강제하여, 타입에| undefined가 명시적으로 추가되지 않는 한 선택적 속성에 undefined를 명시적으로 할당하는 것을 허용하지 않습니다. 이러한 정확한 타이핑은 속성 존재가 의미론적 의미를 갖는 구성 객체 및 업데이트 메커니즘에 유용합니다. 예를 들어, 업데이트 함수는 생략된 필드는 무시하지만 undefined로 설정된 필드는 다르게 처리할 수 있습니다. 이 차이를 이해하는 것은 견고한 API 설계와 정확한 객체 조작에 필수적입니다.