사양타이프 라이터 Array.prototype.map 선언
는 ... 같은
var new_array = arr.map(callback[, thisArg])
문제을 사용해야합니다
타이프 라이터에 대한 몇 가지 오버로드 선언을 가지고 지도, 그리고 이것은 매우 어렵습니다 extend Array<T>
합니다.
나는이 을 (lib.d.ts에있는) 보여야하는데 ...
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
그러나 이러한 ...
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
있다 lib.d.ts
이의 제기
JavaScript는 메소드 오버로드를 허용하지 않으며 클래스 구현을위한 TypeScript도 허용하지 않으므로 TypeScript가 앰비언트 선언을 위해 이것을 허용해야한다고 생각하십시오.
질문
- 왜 타이프 주변 선언에 대한 오버로드 서명을 할 수 있습니까?
- 배열을 확장하는 클래스에서지도 구현을 재정의하려면 어떻게해야합니까?
... https://github.com/Microsoft/TypeScript/issues/13785
주
ReadonlyArray<T>
아니라지도에 대한 하나의 서명을 가지고 있습니다 ...
map<U>(callbackfn: (value: T, index: number, array: ReadonlyArray<T>) => U, thisArg?: any): U[];
여기에서 IMO가 가장 중요한 측면에 대해 질문하지 않은 것은 흥미 롭습니다. _purpose_. * "왜 이러한 모든 오버로드 서명을 처음부터 정의해야합니까?"* - 그 대답은 TypeScript가 한정된 양의 배열을 가지는 타입 개념을 가지고 있다는 것입니다. 예를 들면'[number , number, number]'는 3 요소'number '이다. 이것은 _to_와 _ number_ [number]로부터 할당 가능하지만 컴파일러의 관점에서 볼 때 _precisely_와 동일하지 않습니다. 또한, 이들은 또한 몇몇 문맥에서 튜플 유형이라고 불리며, 꼭 필요하지 않은 inter-assignable elem 유형을 정의 할 수 있습니다. –
@JohnWeisz n 요소 배열에 대한 개념을 알았지 만, 왜이 개념이 5 요소 배열에서 멈출까요? 확실하게 n은 무한 할 수 있습니까? – series0ne