유형 시스템 및 Array.prototype.includes()
TypeScript는 유형 안전성을 강화하므로 Array와 같은 기능을 사용할 때 오류가 발생할 수 있습니다. 프로토타입.include(). 이 함수는 searchElement 인수가 배열 요소와 동일한 유형을 가질 것으로 예상합니다. 그러나 특정 시나리오에서는 입력의 유형이 다를 수 있으므로 유형 인수가 제한되는 이유에 대한 의문이 제기됩니다.
TypeScript 라이브러리는 searchElement 매개변수가 배열 요소와 일치하도록 엄격하게 유형이 지정되었다고 가정합니다. 이 가정은 대부분의 경우에 적용되지만 상위 유형을 처리할 때는 문제가 될 수 있습니다. 이러한 경우 상위 유형을 허용하기 위해 표준 TypeScript 선언을 재정의해야 할 수도 있습니다.
Array.prototype.includes() 재정의
한 가지 접근 방식은 로컬에서 선언 병합을 통한 표준 라이브러리 선언. TypeScript에는 상위 유형 제약 조건이 없으므로 조건부 유형을 사용하여 이를 에뮬레이트합니다.
<code class="typescript">declare global { interface Array<T> { includes<U extends (T extends U ? unknown : never)>( searchElement: U, fromIndex?: number ): boolean; } }</code>
이 선언을 사용하면 원본 코드가 오류 없이 작동합니다.
<code class="typescript">if (exampleArr.includes(e.key)) {} // okay</code>
배열 유형 확대
exampleArr의 유형을 읽기 전용 string[]으로 확장하는 것이 더 간단한 해결책입니다:
<code class="typescript">const stringArr: readonly string[] = exampleArr; // no assertion if (stringArr.includes(e.key)) {} // okay</code>
읽기 전용 string[]으로 확장하면 입력이 손상되지 않고 다른 유형을 가질 수 있습니다. 유형 안전. 대조적으로, string[]으로 확장하는 것은 TypeScript의 배열 공분산에 대한 불건전한 처리로 인해 잠재적으로 안전하지 않을 수 있습니다.
위 내용은 다음은 질문 형식으로 된 몇 가지 제목 옵션입니다. 유형 안전에 중점을 둡니다. * TypeScript가 Array.prototype.includes() 유형 인수를 제한하는 이유는 무엇입니까? * Array.prototype.includes()를 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!