:何らかの理由でTypeScriptでsplice関数の2番目のオーバーロードが見つかりませんか?私は活字体の遊び場に次のコードを書かれている
let x: number[] | number[][];
let y = x.splice(1, 1); // ERROR: Supplied parameters do not match any signature of call target.
は、スプライス機能の第二の過負荷、すなわちsplice(start: number, deleteCount: number, ...items: T[]): T[];
を発見し、コンパイラがエラーを報告していません。
しかし、最初のバージョンsplice(start: number): T[];
が見つかりましたが、それはうまくコンパイルされます。
let x: number[] | number[][];
let y = x.splice(1); // OK
なぜそれは、2つのパラメータで呼び出すことが許可されていない間、一つのパラメータでスプライスを呼び出すためにOKですか?
システムは、(T | number)[] | (T | number)[] []は配列でなければなりません。スプライス 'input.splice(1)'はコンパイルされているので、コンパイラは入力が配列であることを知っています。少なくともこれは私がそれを見ている方法です)) –
@AlexanderNechay私はちょうどどのようなタイプのコンパイラのものが入力されるのか把握しようとしています。これは 'splice'メソッドを持つものですが、' Array'の通常のスプライスではありません。 – ssube
TypeScriptチュートリアル:ユニオンタイプの値を持つ場合、ユニオン内のすべてのタイプに共通のメンバーにしかアクセスできません。ここで私が見る限り、違うことを言うコードがあります: 'let x1:number []; let x2:number [] []; x1.splice(1,1); x2.splice(1,1); let x:number [] |数[][]; x.splice(1,1); //エラー ' –