iamkanguk.dev

[TS] 빈 객체에는 어떤 타입을 사용해야 할까요? 본문

Language/TypeScript

[TS] 빈 객체에는 어떤 타입을 사용해야 할까요?

iamkanguk 2024. 2. 7. 18:14

코드를 작성하다가 빈 객체의 타입에 대해서 갑자기 궁금해지기 시작했다.  빈 객체에는 어떤 타입을 사용해야 할지 알아보자.

 

1.  {} (빈 객체)의 의미

타입스크립트에서 빈 객체({})는 "any non-nullish value"를 의미한다. 다시 말해 null을 제외한 모든 값들을 허용한다는 의미이다.

실제로 다음과 같이 코드를 작성하면 에러가 나지 않는다.

type EmptyObject = {};

const temp1: EmptyObject = 'hello world!';
const temp2: EmptyObject = 1111;

 

undefined 값을 넣으면 에러는 발생한다. 프로젝트 코드를 작성하면서 이 부분을 의외로 많이 실수해서 정리하게 되었다..

 

2.  어떻게 사용할 것인지?

(1) 아무것도 들어가지 않을 빈 객체를 의미하고 싶을 때

Record<string, never>를 사용하면 된다. Property 값에 never를 지정하면서 아무 값도 들어가지 않을 객체라고 알려준다.

참고로 Record 타입은 Record<Key, Value> 형태로 사용하면서 키가 Key 타입이고, 값이 Value 타입인 객체 타입을 생성한다.

(2) 객체를 의미하는 경우

Record<string, unknown>를 사용하면 된다. Property에 unknown을 지정하면서 모든 타입의 값이 할당될 수 있다는 객체임을 명시해준다.


참고자료

- https://blog.hoseung.me/2021-09-15-typescript-empty-object

 

타입스크립트의 {} 타입

'빈 객체'를 타입으로 정의하는 방법을 알아봅시다.

blog.hoseung.me

- https://db2dev.tistory.com/entry/TS-%EB%B9%88-%EA%B0%9D%EC%B2%B4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%98%AC%EB%B0%94%EB%A5%B8-%ED%83%80%EC%9E%85

 

[TS] 빈 객체에 대한 올바른 타입

{} 을 타입으로 사용하지 않기 빈 객체에 {} 타입을 지정하면 @typescript-eslint/ban-types 경고가 발생한다. {} 타입은 null이 아닌 모든 값이라는 뜻이기 때문에 타입을 지정했음에도 컴파일 때 이 값이

db2dev.tistory.com