# 더 좋은 타입스크립트 프로그래머로 만드는 11가지 팁 [번역]

> Clean Markdown view of GeekNews topic #8171. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=8171](https://news.hada.io/topic?id=8171)
- GeekNews Markdown: [https://news.hada.io/topic/8171.md](https://news.hada.io/topic/8171.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2023-01-04T10:19:02+09:00
- Updated: 2023-01-04T10:19:02+09:00
- Original source: [velog.io](https://velog.io/@lky5697/11-tips-that-help-you-become-a-better-typescript-programmer)
- Points: 26
- Comments: 6

## Topic Body

#1 {집합(Set)}이라고 생각하기  
#2 선언된 타입과 좁혀진(narrowed) 타입의 이해  
#3 옵셔널 필드 대신에 구분된 유니온 사용  
#4 타입 단언을 피하기 위한 타입 명제 사용  
#5 유니온 타입 분배 제어  
#6 철저한 검사를 통한 컴파일시 처리되지 않은 케이스 체크  
#7 interface보다 type을 사용  
#8 적절한 상황에는 배열보다는 튜플을 사용  
#9 추론된 타입이 일반적이거나 구체적이도록 제어  
#10 추가 제네릭 타입 매개 변수를 만들기 위해 infer를 사용  
#11 타입 조작으로 창의성을 발휘하여 DRY 상태를 유지  
마무리

## Comments



### Comment 13991

- Author: tested
- Created: 2023-01-04T11:20:39+09:00
- Points: 2

7번은 React 관점에서 쓴 것 같아 보이네요.  
저는 Type보다 Interface를 선호합니다. 다른 언어에도 있는 구문이기도 하구요.  
- https://stackoverflow.com/a/37233777  
- https://github.com/microsoft/TypeScript/wiki/Performance#preferring-interfaces-over-intersections

### Comment 14003

- Author: alstjr7375
- Created: 2023-01-04T21:57:53+09:00
- Points: 1
- Parent comment: 13991
- Depth: 1

저도요. 예전에 타입스크립트 핸드북에서도 인터페이스를 되도록 우선 사용하라는 조언도 있던걸로 기억합니다.

### Comment 14004

- Author: alstjr7375
- Created: 2023-01-04T22:00:48+09:00
- Points: 2
- Parent comment: 14003
- Depth: 2

이 내용이네요.  
  
- https://www.typescriptlang.org/docs/handbook/advanced-types.html#interfaces-vs-type-aliases  
- https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces

### Comment 13988

- Author: bichi
- Created: 2023-01-04T10:27:04+09:00
- Points: 1

다 좋은데 7 interface보다 type을 사용 은 굳이? 팁이라고 할수 없네요 표현력이 interface 가 더 좋은게 있어서 예) interface Foo {(b: number): A; (): B}

### Comment 13999

- Author: a741593
- Created: 2023-01-04T17:41:23+09:00
- Points: 1
- Parent comment: 13988
- Depth: 1

Type을 옹호하는건 아닌데, 표현력이 더 좋은 예가 잘 이해가 안됩니다. 해당 예문도 Types로 동일하게 표현할 수 있는거 아닌가요?  
  
interface Foo {(b: number): A; (): B}  
type Foo =     {(b: number): A; (): B}

### Comment 14026

- Author: harimkims
- Created: 2023-01-05T14:01:27+09:00
- Points: 3
- Parent comment: 13999
- Depth: 2

이펙티브 타입스크립트 책에서 타입과 인터페이스 중에 어느것을 사용해야 할지 정리해둔 부분이 있어 인용해봅니다.  
  
> 타입과 인터페이스 중 어느것을 사용해야 할지 결론을 내려 보겠습니다. **복잡한 타입이라면 고민할 것도 없이 타입 별칭을 사용하면 됩니다.** 그러나 타입과 인터페이스, **두 가지 방법으로 모두 표현할 수 있는 간단한 객체 타입이라면 일관성과 보강의 관점에서 고려해 봐야 합니다.** 일관되게 인터페이스를 사용하는 코드베이스에서 작업하고 있다면 인터페이스를 사용하고, 일관되게 타입을 사용 중이라면 타입을 사용하면 됩니다.  
  
아직 스타일이 확립되지 않은 프로젝트라면, 향후에 보강의 가능성이 있을지 생각해 봐야 합니다. **어떤 API에 대한 타입 선언을 작성해야 한다면 인터페이스를 사용하는 게 좋습니다. API가 변경될 때 사용자가 인터페이스를 통해 새로운 필드를 병합할 수 있어 유용하기 때문입니다.** 그러나 **프로젝트 내부적으로 사용되는 타입에 선언 병합이 발생하는 것은 잘못된 설계입니다.** 따라서 이럴 때는 타입을 사용해야 합니다.
