■ 잉여 속성 검사
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 |