잉여 속성 검사, void의 사용법

모두의희망·2023년 1월 9일
0

TypeScript

목록 보기
8/11
post-thumbnail

잉여속성 검사


잉여속성 검사 변수 따로 빼지 않음

interface A { a: string }
const obj1: A = { a: 'hello', b: 'world' }; 
  • 객체 리터럴에서는 잉여 속성 검사라는게 있다.
  • 잉여 속성 검사로 인하여 interface A에는 a속성만 들어있는데 obj1에 b속성을 넣었더니 에러가 발생했다.

잉여속성 검사 변수 따로 뺀 버전

interface A { a: string }
const obj = { a: 'hello', b: 'world' };
const obj1: A = obj; 

중간에 obj를 따로 변수로 빼면 처음에 b:'world'가 에러가 났었는데 에러가 나지 않는다. 즉 중간에 변수를 하나 끼면 잉여속성검사를 하지 않고 변수가 없으면 잉여 속성 검사를 한다.

void

function a(): void{
   return '3'; //에러 
   return null; //에러 
   return undefined; //가능 
   return; //return만 있거나 return자체가 없거나..가능
}

return에 값이 있으면 에러가 뜬다.undefined는 가능하다. null은 안된다.보통 return값을 아예 없거나 단순히 return만 있거나 한다. 이런 함수들이 return타입이 void가 된다.

3가지 경우의 void

function a(callback: ()=> void ): void {     
}

a(() => { //매개변수의 void는 return값이 존재 가능
   return ' 3 ';
} );

interface Human {
  talk: () => void;
}
const human: Human = {
   talk() { return 'abc'} 
}

매개변수에서의 함수 형식 void와 return에서의 void 그리고 메서드에서의 함수형식 void 총 3가지 경우가 있다.

  • 매개변수의 void는 return 값이 존재 해도 된다.
  • 메서드에서의 void도 return 값이 존재 해도 된다.
  • 함수의 return자리의 타입이 void인 경우만 직접적으로 return값을 적으면 안된다.
  • 매개변수와 메서드의 void에서는 return값을 사용 할 수 있는 이유는 void는 return값을 사용하지 않겠다 이고, return 값의 void는 직접적으로 return값이 없다는 의미.

실질적인 예시

declare function forEach( arr: number[], callback: ( el: number ) => void ) : void; 

let target: number[] = [];
forEach([1,2,3], el => target.push(el));
  • callback 매개변수에서 void를 지정 해놨는데 target.push에서 number임에도 불구하고 가능한 이유는 매개변수의 void는 실제 return값이 뭐든 상관 없다.void가 undfined랑 다르다.
  • declare는 외부에서 forEach함수를 선언했다. 그래서 여기서는 타입만 선언 했다. 보증함.
                 
profile
개발을 진정성 있게 다가가겠습니다.

0개의 댓글