が...このよう
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[];
しかしlib.d.tsを見ることを期待する
はまた、これらの...
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];
を持っています
異論
JavaScriptではメソッドのオーバーロードが許可されていないため、クラス実装のためのTypeScriptもどちらも実装されていませんTypeScriptが周囲の宣言のためにこれを許すべきだと考えてください。
質問
- なぜ活字体は、周囲の宣言のためにオーバーロードされた署名を許可していますか?
- Arrayを拡張するクラスのマップ実装をオーバーライドするにはどうすればよいですか?私はあまりにも... https://github.com/Microsoft/TypeScript/issues/13785
注
ReadonlyArray<T>
があるだけでマップのための単一の署名を、持っているGitHubの上でこれを提起しました
...
map<U>(callbackfn: (value: T, index: number, array: ReadonlyArray<T>) => U, thisArg?: any): U[];
ここで最も重要なのは、IMOとは何かについて尋ねなかったのは興味深いことです:_purpose_。 *「なぜこれらすべてのオーバーロードシグネチャを最初に定義するのですか?」* - その答えは、TypeScriptには要素の有限数を持つ配列の型概念があります。たとえば、[[number 、number、number] 'は3要素のnumber []'です。これは_to_と_from_ 'number []'の両方に割り当て可能ですが、コンパイラの観点からはまったく同じではありません。また、これらはある種の文脈ではタプル型とも呼ばれ、必ずしも相互に代入可能なelem型を定義することはできません。 –
@JohnWeisz私はn要素配列の概念を得ていますが、なぜこの概念は5要素配列で止まるのでしょうか?確かにnは無限になる可能性がありますか? – series0ne