inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편

Omit, Exclude, Extract 타입 분석

Omit 타입에서 K extends keyof any에 대해서 질문있습니다.

423

wognskec

작성한 질문수 7

1

Omit에서 K extends keyof any로 키값만 들어올 수 있도록 제한을 주었는데

이전 강의때 말씀해주셨던 타입은 정확할수록 좋다는 말씀이 생각나서 질문드립니다.

키 값중에서도 T의 키값이 들어와야 더 정확하다고 생각해서 K extends keyof T 가 더 올바르다고 생각하는데

any로 쓴 이유가 있을까요??

type E<T, U> = T extends U ? never : T;

type P<T, K extends keyof T> = {
  [P in K]: T[P];
};

type O<T, K extends keyof T> = P<T, E<keyof T, K>>;

typescript

답변 2

2

rhkdtjd_12

저도 해당부분 궁금해서 이거 좀 stric한 Omit이 낫지 않나 생각 해서 찾아보니까 이미 typescript 레포에 이슈가 올라 와있고 microsoft/typescript 오픈소스 개발자에 의해 거절 당한 이슈네요.

 

https://github.com/microsoft/TypeScript/issues/30825

코멘트들이 길어서 그냥 대충 봤는데 typescript 개발자 말로는 strictOmit 같은거 만들어서 커스텀 해서 써라! 인것 같습니다.

아래는 해당 이슈의 microsoft/typescript 개발자의 코멘트를 번역한 내용입니다.

많은 논의 끝에, 우리는 라이브러리가 자체적으로 "더 엄격한" 버전의 생략(및 제외 및 기타 친구)을 제공하는 것이 바람직하다고 생각합니다. 이러한 유형의 엄격한 버전은 업스트림 제약 조건을 강요한다는 측면에서 매우 전염성이 강하며 사람들이 현명하게 선택할지 불분명합니다. 신중하게 관리하지 않으면 실제 마찰을 유발할 수 있습니다.

Omit이 라이브러리에 추가되었기 때문에 더더욱 그러합니다. OmitStrict를 선택하면(물론 여러 정의 중에서 선택할 수 있겠지만) 사용자 공간에 좋은 이름이 별로 남지 않습니다. 이러한 모든 헬퍼 유형을 작성하는 방법에는 몇 가지가 있으며 개발자가 "엄격한"에 대한 자신의 정의에 맞는 유형을 선택하도록 하는 것이 개인의 자유를 극대화할 수 있는 옵션입니다.

여기와 트위터에서 우리가 선택한 (전적으로 방어 가능한 IMO의) 생략 정의에 대한 반응은 그들이 선호하는 정의를 선택하지 않아 약 30~70%의 개발자를 화나게 할 OmitStrict를 선택하는 것에 대해 왜 우리가 별로 좋아하지 않는지를 보여줍니다. 정의가 완전히 모호하지 않은 경우에만 라이브러리에 추가하는 것이 좋은데, OmitStrict는 그 기준에 부합하지 않습니다. 돌이켜보면 Omit도 그렇지 않았고, 어쩌면 그냥 빼버렸어야 했을지도 모릅니다.

개발자 여러분, TS가 그 이름을 짓밟지 않을 거라는 사실을 알고 행복하고 안전하게 OmitStrict에 대한 정의를 선택해 보세요 😬.

0

메가

오 이거 궁금해서 질문창 열었는데 마침 너무 좋은 답변이 있어서 궁금증 해소하고 갑니다 감사합니다👍

0

제로초(조현영)

키를 안 쓸 수도 있으니까요.

{ a: 'b', c: 'd', e: 'f' }가 있을 때 Omit<obj, 'a'> 할 수도 있지만 Omit<obj, 'z'> 할 수도 있습니다.

0

wognskec

키가 아닌 값이라면 Omit을 쓰는 이유가 없지 않나 의문이 들어서 질문했습니다.

어떤경우에 키가 아닌 값을 Omit에서 쓰는 경우가 있나요??

1

제로초(조현영)

쓰는 사람 마음이겠죠..? 뭔 객체든간에 무조건 특정 키가 없어야하는 경우도 있을 수 있고요.

데코레이터가 현재도 자주 쓰이는 문법인가요?

0

81

2

유틸리티 타입 실제로 구현은 못해도 하나씩 외우면 실무할 때 지장 없겠죠?

0

66

1

매핑 타입은 type에서밖에 안된다고 하네요?

0

65

2

자바에서의 오버로딩과 같은 개념이라고 생각해도 되나요?

0

69

2

filter 함수 반환 타입 네로잉 질문

0

74

2

map<U>(callbackfn: ....) 할때 U는 왜 여기 있는거에요??

0

47

2

ts 컴파일을 위한 type 라벨링 부분

0

46

1

concat 함수 타입 구현 중 질문 있습니다!

0

100

2

filter 메소드 질문

0

53

1

forEach 제네릭 관련 문의

0

60

1

타입 추론 시 가장 넓은 범위로 추론이 되는 건가요?

0

165

1

enum이 javascript로 트랜스파일링될때 사라진다하셨는데요

0

207

1

함수 파라미터 타입 정의 시 ...args: any[]와 ...args: any 의 차이

0

223

1

Flat type에서 ReadonlyArray 타입을 사용하는 이유?

0

157

1

bind type 질문

1

149

1

Lowercase type 관련 질문

0

152

1

key-value 타입 자동추론 질문드립니다

0

266

1

타입스크립트 교과서, p131

0

266

1

타입스크립트 교과서 p122 forEach 메서드 질문

0

232

1

타입스크립트 교과서 p116 , 코드에러남

1

269

1

타입스크립트 교과서 p112 , 코드가 안읽힙니다..

0

266

1

타입스크립트 교과서 p83

1

184

1

타입스크립트교과서 p39 쪽 코드가 이해가 안되요

1

227

1

class 에서 ts의 private vs js의 private field( # )

0

339

1