> 웹 프론트엔드 > JS 튜토리얼 > angular.toJson을 통해 객체를 전달할 때 객체에 해당 인터페이스에 정의된 속성만 포함되어 있는지 어떻게 확인할 수 있나요?

angular.toJson을 통해 객체를 전달할 때 객체에 해당 인터페이스에 정의된 속성만 포함되어 있는지 어떻게 확인할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-10-31 16:28:02
원래의
244명이 탐색했습니다.

How can we ensure that an object only contains properties defined in its interface when passing it through angular.toJson?

인터페이스를 통한 객체 규정 준수 보장: 외부 속성 제거

TypeScript 인터페이스는 클래스 또는 객체에 대한 계약 사양을 정의합니다. 그러나 구현 중에 인터페이스에서 정의한 것 이상으로 추가 속성이 추가되어 불일치가 발생할 수 있습니다. 특히 RESTful 통신을 위해 angle.toJson을 통해 축소된 개체를 전달할 때 이 문제를 해결하는 것이 중요합니다.

단일 속성 테스트가 있는 MyInterface 인터페이스를 고려하세요.

<code class="typescript">interface MyInterface {
  test: string;
}</code>
로그인 후 복사

그리고 추가 속성을 사용한 구현 property newTest:

<code class="typescript">class MyTest implements MyInterface {
  test: string;
  newTest: string;
}</code>
로그인 후 복사

질문:

MyTest와 같은 객체에서 할당될 때 축소된 객체가 MyInterface에 선언된 속성만 포함하도록 어떻게 보장할 수 있습니까? , newTest는 제외됩니까?

답변:

안타깝게도 인터페이스 정의만을 기반으로 런타임 시 객체에서 관련 없는 속성을 직접 제거하는 것은 불가능합니다. TypeScript의 인터페이스는 디자인 타임 구성으로 사용되며 해당 속성은 실행 시 쉽게 사용할 수 없습니다.

제안되는 한 가지 잠재적인 해결책은 "인터페이스"를 클래스로 정의하여 런타임 구현을 제공하는 것입니다. 이를 통해 Lodash를 활용하여 입력 객체에서 원하는 속성만 선택할 수 있습니다.

<code class="typescript">class MyInterface {
  test: string = undefined;
}</code>
로그인 후 복사
<code class="typescript">import _ from 'lodash';

const before = { test: "hello", newTest: "world"};
let reduced = new MyInterface();
_.assign(reduced , _.pick(before, _.keys(reduced)));
console.log('reduced', reduced)//contains only 'test' property</code>
로그인 후 복사

이 방법을 사용하면 지정된 속성을 효과적으로 추출하여 인터페이스를 준수하는 객체를 생성할 수 있습니다. 계약이 완료되었으며angular.toJson을 통해 직렬화할 준비가 되었습니다.

위 내용은 angular.toJson을 통해 객체를 전달할 때 객체에 해당 인터페이스에 정의된 속성만 포함되어 있는지 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿