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