글쎄, internetMessageId
은 Office
의 속성이 아닙니다. Office
은 당신이 @js.native trait Context
외관을 정의하는 속성 mailbox
을 가지고 있고, 그래서 당신이 마지막으로 속성 internetMessageId
을 정의 @js.native trait Item
에 도달 할 때까지해야 @js.native trait Context
외관을 정의하는 특성 cotnext
을 가질 필요가있다. 이 계층 구조에 대한
예 형질 코드 :
@js.native
trait Context extends js.Object {
val mailbox: Mailbox = js.native
}
그런 다음
Office.context.mailbox.item.internetMessageId
이 실제로 유효한 형식 검사 스칼라 코드가 될 것입니다.
그러나, @js.native
외벽을 정의 할 때 Scala 컴파일러는 올바르게 정의했다고 가정합니다. 예를 들어 첫 번째 단락에서했던 것처럼 context
철자가 틀리면 런타임에 코드가 실패합니다. 그래서 당신의 타입 안전은 당신의 정면과 마찬가지로 좋습니다. 당신은 단지 전체 중첩 된 구조에서이 하나의 필드에 액세스해야하는 경우
그래서, 당신은 js.Dynamic
를 사용하여 비 형태 보증 된 방법으로 중첩 필드에 액세스 할 것이다, 다만 어딘가에 일부 getInternetMessageId
방법을 정의하여 시간을 절약 할 수 있습니다 . 그것은 좀 이상하고 임시적으로 보일 것입니다. 그러나 그것은 그것이 있기 때문입니다. 하지만 덜 형식 안전하지 않을 것입니다.
요점은 JS 제공 객체를 처리 할 때 어딘가에 "유형 안전하지 않은"것을 포함해야한다는 것입니다. 그것은 정면 (옵션 1) 안에 그것을 포함하는 것이 가장 좋지만 때로는 너무 많은 간접비입니다.