keyof를 통해 TypeScript 교차를 이해하는 방법
P粉451614834
2023-09-05 22:37:33
<p><pre class="brush:php;toolbar:false;">인터페이스 사람 {
이름: 문자열;
}
인터페이스 수명 {
생일;
사망: 날짜;
}
유형 PersonSpan = 개인 및 수명;
type K = keyof PersonSpan; // 유형 K = "출생" |
let prop: K = "name" // 좋아요
let obj: PersonSpan = { // 컴파일 오류, 출생 및 사망 속성 누락
이름: "존 스미스"
}</pre>
<p><code>keyof</code>를 통해 유형 교차를 이해하려면: </p>
<p>이 객체 인스턴스의 키<code>{ name: "John Smith" }</code>는 <code>name</code>이며, 이는 PersonSpan의 키</code>와 일치합니다. 즉, <code> "name" | "birth" | "death" </code>인 경우에는 <code>let prop: "name" |을 실행하는 것이 유효합니다. "출생" | "죽음" = "이름" </code></p>
<p>객체에 이 세 가지 속성 중 하나가 있으면 유효해야 하는데 왜 여전히 <code>PersonSpan</code>에 할당할 수 있는 모든 속성을 가져야 합니까? </p>
TypeScript에서 둘 이상의 유형의 교차점을 사용하여 유형을 정의하면 결과 유형은 각 교차점 유형의 모든 속성을 갖게 됩니다. 이 경우 PersonSpan은 Person과 Lifespan의 교차점으로 정의되므로 PersonSpan 유형의 개체는 Person과 Lifespan의 모든 속성을 가져야 합니다. Keyof PersonSpan의 결과가 "name" | "birth" | "death"라고 해도 이는 이러한 속성 중 하나만 가진 객체가 PersonSpan에 유효하다는 의미는 아니며 초기화한 K 유형이 PersonSpan의 결합임을 의미합니다. 속성 이름을 설정하면 PersonSpan 유형의 객체에서 "name" 키, "birth" 또는 "death" 키를 사용하여 이러한 속성에 액세스할 수 있습니다. 이는 찾고 있는 부분 유형일 수도 있으므로 모든 props가 선택 사항이 됩니다
으아악