잉여 속성 검사(엄격한 객체 리터럴 검사)

OnStar·2022년 10월 11일
0

타입스크립트

목록 보기
2/3
post-thumbnail
post-custom-banner

잉여 속성

잉여 속성 체크 = 엄격한 객체 리터럴 체크

잉여 속성 - 객체 리터럴의 속성 중 변수의 객체 타입에 선언된 속성에 포함되지 않는 속성

→ 변수에 객체 리터럴을 할당하는 경우, 할당할 객체 리터럴의 속성(프로퍼티) 중 잉여 속성이 있으면, 컴파일러 및 타입 체커가 에러를 발생시킨다.

→ 구조적 할당 가능한 검사와 잉여 속성 체크는 별도의 과정이다.

// 잉여 속성 체크

interface SomeInterface {
	x: string;
	y: string;
}

const someVariable:SomeInterface = { x: 'x', y: 'y', z: 'z' }
// 여기서 문제 발생, 잉여 속성 체크

/*
잉여 타입 체크 에러메시지
Type '{ x: string; y: string; z: string; }' is not assignable to type 'SomeInterface'.
Object literal may only specify known properties, and 'z' does not exist in type 'SomeInterface'.(2322)
*/

구조적 타이핑의 관점에서는 문제가 없다고 보일 수도 있지만,

객체 리터럴을 할당하는 과정에서 발생하는 잉여 속성 체크의 과정이다.

(따라서, 구조적 타이핑을 무시하는 예외적 경우이다.)

// 구조적 타이핑

interface SomeInterface {
	x: string;
	y: string;
}

const anotherVariable = { x: 'x', y: 'y', z: 'z' }

const someInterVariable:SomeInterface = anotherVariable; // 정상 동작

{ x: 'x', y: 'y', z: 'z' }라는 객체 리터럴을 직접 할당하는 상황과, 객체 리터럴을 미리 변수에 할당하고 해당 변수를 할당하는 상황과 동작은 같지만, 타입스크립트는 다르게 해석하고 에러를 전자의 상황만 에러를 발생시킨다.

post-custom-banner

0개의 댓글