>  기사  >  웹 프론트엔드  >  TypeScript에서 JavaScript 개체를 인터페이스 속성으로만 줄이는 방법은 무엇입니까?

TypeScript에서 JavaScript 개체를 인터페이스 속성으로만 줄이는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-31 06:12:01635검색

How to Reduce JavaScript Objects to Only Interface Properties in TypeScript?

JavaScript 객체를 인터페이스 속성으로 축소

TypeScript로 작업할 때 TypeScript에 선언된 속성만 포함하도록 JavaScript 객체를 축소해야 하는 경우가 종종 있습니다. 인터페이스. 이는 특정 스키마를 기대하는 REST 서비스에 데이터를 보낼 때 특히 유용합니다.

다음 인터페이스를 고려하세요.

<code class="typescript">interface MyInterface {
  test: string;
}</code>

그리고 추가 속성을 포함하는 구현:

<code class="typescript">class MyTest implements MyInterface {
  test: string;
  newTest: string;
}</code>

이 문제는 Angular의 toJson 메서드를 사용하여 REST 서비스로 보내기 위해 MyTest 인스턴스를 직렬화하려고 할 때 발생합니다. toJson 메서드에는 인터페이스의 일부가 아닌 newTest 속성이 포함되어 있습니다. 이로 인해 서버 측에서 오류가 발생할 수 있습니다.

이 문제를 해결하려면 MyInterface 인터페이스에 선언된 속성만 포함하도록 MyTest 인스턴스를 줄이는 방법을 찾아야 합니다. 그러나 TypeScript의 인터페이스는 기본적으로 런타임 표현이 없는 자리 표시자이므로 이는 직접적으로 불가능합니다.

대신 해결 방법을 사용할 수 있습니다. 한 가지 접근 방식은 인터페이스를 속성 초기화 프로그램이 있는 클래스로 정의하는 것입니다.

<code class="typescript">class MyInterface {
  test: string = undefined;
}</code>

이 클래스를 인터페이스로 사용하면 Lodash와 같은 라이브러리를 사용하여 인터페이스와 일치하는 속성만 선택할 수 있습니다.

<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); // { test: "hello" }</code>

이 솔루션은 MyInterface 인터페이스에 선언된 속성만 포함하도록 MyTest 인스턴스를 효과적으로 줄여 문제에 대한 간단하고 실용적인 솔루션을 제공합니다.

위 내용은 TypeScript에서 JavaScript 개체를 인터페이스 속성으로만 줄이는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.