>  기사  >  웹 프론트엔드  >  JavaScript 객체에 TypeScript의 인터페이스 속성만 포함되도록 하는 방법은 무엇입니까?

JavaScript 객체에 TypeScript의 인터페이스 속성만 포함되도록 하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 04:33:30432검색

How to Ensure JavaScript Objects Contain Only Interface Properties in TypeScript?

JavaScript 객체를 인터페이스 속성으로 줄이기

TypeScript 인터페이스는 객체에 대한 계약을 정의하고 유형 안전성을 보장합니다. 그러나 때로는 객체에 인터페이스에서 지정한 속성만 포함되어 있는지 확인해야 할 수도 있습니다.

문제:

다음 TypeScript 코드를 고려하세요.

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

class MyTest implements MyInterface {
  test: string;
  newTest: string;
}

const test: MyTest = { test: "hello", newTest: "world" };
const reduced: MyInterface = test; // reduced still contains "newTest"</code>

왜 문제가 되나요?

REST 호출 전에 Angular의 toJson 메서드를 사용하면 JSON에 추가 속성(newTest)이 포함되어 문제가 발생할 수 있습니다.

솔루션 1: 해결 방법

James Moey는 우아한 해결 방법을 제공합니다. 대신 인터페이스를 클래스로 선언하고 Lodash를 사용하여 인터페이스 속성만 선택합니다. 객체에서:

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

import _ from 'lodash';
let reduced = new MyInterface();
_.assign(reduced, _.pick(before, _.keys(reduced)));</code>

이 솔루션을 사용하면 결과 객체에 인터페이스 속성만 포함하면서 유형 안전성을 유지할 수 있습니다.

솔루션 2: 인터페이스 도우미 함수

또 다른 접근 방식은 인터페이스에 대해 객체의 유효성을 검사하는 도우미 함수를 만드는 것입니다. 예를 들면 다음과 같습니다.

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

function reduceObject(obj: any, targetInterface: any): MyInterface {
  const reduced = {};
  Object.keys(targetInterface).forEach((key) => {
    if (obj[key] !== undefined) {
      reduced[key] = obj[key];
    }
  });
  return reduced;
}

const test: MyTest = { test: "hello", newTest: "world" };
const reduced: MyInterface = reduceObject(test, MyInterface);</code>

이 접근 방식은 루프 검사를 사용하여 인터페이스에 대해 객체의 유효성을 검사하고 Lodash 선택 기능의 오버헤드를 방지합니다.

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

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