본문 바로가기
Language/TypeScript

void

by Zayne 2023. 2. 13.

■ 잉여 속성 검사

 

interface A {
  a: string;
}

const obj: A = { a: "hello", b: "world" }; // b 속성에 에러 발생
// 개체 리터럴에는 잉여 속성 검사가 존재

const obj1 = { a: "hello", b: "world" };
const obj2: A = obj1; // 에러 검사 오류

 

■ void

 

// 반환형이 void 이면 undefined return 가능
function a(): void {
  return "hello"; // ERROR
}
function b(): void {
  return null;  // ERROR
}
function c(): void {
  return undefined;
}

 

■ void 의 세가지 형식

 

function d(): void {} // 함수 반환형이 void 인 경우

function e(callback: () => void): void {} // 매개변수가 void 인 경우

interface Human {
  talk: () => void; // 메소드가 void 인 경우
}

 

> 매개변수와 메소드의 void 경우 리턴 값 존재 가능 => 리턴 값을 사용하지 않겠다는 의미

   다음과 같이 정의가 가능하다.

 

e(() => {
  return 1; // void 이지만 리턴 값 존재
});

const human: Human = {
  talk() {
    return "abc"; // void 이지만 리턴 값 존재
  },
};

 

> 사용 예시

 

declare function forEach(arr:number[], callback:(el:number)=> undefined):void; 
// declare를 써서 타입만 만들어 줄 수 있음. js로 변환시 사라진다.

let target :number[] = []
forEach([1,2,3],el => target.push(el)); 
// push의 리턴 값은 number 형식. number는 undefined에 할당할 수 없다.
// callback:(el:number)=> number) 로 수정 시 에러 사라짐.
// callback:(el:number)=> void)로 콜백함수의 리턴 값을 void로 해도 에러가 사라진다.
// 매개변수에서 쓰이는 void는 리턴 값이 무엇이든 올 수 있다.

// 아래와 같은 상황에서는  콜백함수의 리턴 값을 void로 하면 에러가 사라진다.
forEach([1,2,3],el => target.push(el)); // 반환형 number
forEach([1,2,3],el => {target.push(el)}); // 반환형 void

'Language > TypeScript' 카테고리의 다른 글

타입 가드  (0) 2023.02.16
unknown, any  (0) 2023.02.15
타입과 인터페이스 상속  (0) 2023.02.11
union(|)과 intersection(&)  (0) 2023.02.09
enum, keyof, typeof  (0) 2023.02.07