반응형
"K extends key of T"와 "key of T"를 직접 사용하는 것의 차이점은 무엇입니까?
다음 유형 스크립트 정의 간에 차이가 있습니까?
function prop<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
그리고.
function prop2<T>(obj: T, key: keyof T) {
return obj[key];
}
아니요, 하지만 제가 감독한 게 있을지도 몰라요.첫 번째 버전(문서에서 자주 사용됨)을 사용할 수 있는 이점이 있습니까?
차이점은 첫 번째 경우 반환 유형이T[K]
두 번째 경우에는 그럴 것입니다.T[keyof T]
.K
될 수 있는 한 가장 넓은 것은keyof T
키를 나타내는 특정 문자열 리터럴 유형일 수 있습니다.이것은 만약을 의미합니다.K
반환 값이 속성과 동일한 유형이 될 특정 속성입니다.
function prop<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
function prop2<T>(obj: T, key: keyof T) {
return obj[key];
}
let o = {
p1: 0,
p2: ''
}
let v = prop(o, 'p1') // is number, K is of type 'p1'
let v2 = prop2(o, 'p1') // is number | string, no extra info is captured
이 두 식 사이에는 큰 차이가 있으며, 이로 인해 컴파일러가 다르게 동작합니다.
function prop<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
이 도움말은 일반 매개 변수를 사용하지 않도록 제한합니다.any
입력 매개 변수가 다음을 지원하는지도 확인합니다.T
function prop2<T>(obj: T, key: keyof T) {
return obj[key];
}
이것은 게터에 대한 컴파일러 오류를 발생시키지 않지만 세터의 경우에는 발생합니다.Type 'any' is not assignable to type 'never'.ts(2322)
function prop2<T>(obj: T, key: keyof T, value: any) {
obj[key] = value;
}
이유는keyof
obj[key]를 갖게 할 것입니다.never
유형(키가 겹치지 않음), 자세한 내용은 https://stackoverflow.com/a/61758818/9814737 을 참조하십시오.
언급URL : https://stackoverflow.com/questions/53099089/difference-between-of-k-extends-keyof-t-vs-directly-using-keyof-t
반응형
'programing' 카테고리의 다른 글
Nux JS에서 Vuex 모듈 모드를 올바르게 사용하는 방법은 무엇입니까? (0) | 2023.07.17 |
---|---|
셀러리 작업을 단위 테스트하는 방법은 무엇입니까? (0) | 2023.07.17 |
다른/변경된 경우 업데이트 (0) | 2023.07.17 |
파이썬에서 사전을 쿼리 문자열로 변환하는 방법은 무엇입니까? (0) | 2023.07.17 |
NLTK 토큰라이저를 사용하여 구두점을 제거하는 방법은 무엇입니까? (0) | 2023.07.17 |