작성
·
378
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>>;
답변 2
2
저도 해당부분 궁금해서 이거 좀 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에 대한 정의를 선택해 보세요 😬.
오 이거 궁금해서 질문창 열었는데 마침 너무 좋은 답변이 있어서 궁금증 해소하고 갑니다 감사합니다👍