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 중국어 웹사이트의 기타 관련 기사를 참조하세요!