• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

23.08.01 11:47 작성 조회수 190

0

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>>;

답변 2

·

답변을 작성해보세요.

1

rhkdtjd_12님의 프로필

rhkdtjd_12

2023.09.26

저도 해당부분 궁금해서 이거 좀 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

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

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

wognskec님의 프로필

wognskec

질문자

2023.08.02

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

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

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