エントリがタプルごとに異なる可能性があるタプルの配列に型を割り当てるにはどうすればよいですか?
P粉068486220
P粉068486220 2023-09-06 22:44:17
0
2
500

function foo(args) {...}があるとします。argsは、タプル内のエントリが同じ型 (つまり[T,T]) ですが、タプルにわたるエントリは任意に変更される可能性があります (つまり、[[T,T], [U,U ],[ V、V]])。例えば:### リーリー

タプル内の型が一致しないとコンパイル時に型エラーがスローされるようにするには、

fooargs引数をどのように入力すればよいですか?例えば:### リーリー型エラーをインラインで表示できない場合は、関数呼び出し全体が間違っていることも許容されます。


付録

:[SomeType, T]型の2タプルを使用することは可能ですか(つまり、2番目のエントリは最初のエントリと同じ型である必要があります) )、ただし、T はタプル [[SomeType , T],[SomeType, U],[SomeType , V]] ? 間で異なる場合があります。 ああああ

P粉068486220
P粉068486220

全員に返信 (2)
P粉948258958

これは、stringnumber、またはboolean 値##を受け入れるrow の型を作成するだけで実現できると思います。 #。

タイプ行 = 文字列[] |ブール値[]|数値[]

これで、この型を

foo関数のargs引数に割り当てることができます。リーリー

この型定義では、行内の要素の型が一致しない

fooに引数を指定すると、Typescript はエラーをスローします。

ここは遊び場です

リンク代码>.

いいねを押す+0
    P粉136356287

    これを実現するには、汎用配列とマッピング タイプを使用して配列の要素をマップする必要があります。配列は長さ 2 のタプルの配列である必要があることがわかっているため、タプル内の最初の項目のジェネリック パラメーターを推測し、2 番目の項目を同じ型にします。ジェネリック パラメーターの型を取得するには、を使用してキーワードを推測する必要があります。これを機能させるために使用されるジェネリック型を正確に (または少なくとも同様の形状の型) 知る必要があることに注意してください。この場合、それはVariable:

    です。 リーリー

    これだけのように思えるかもしれませんが、次の配列の型を見てみましょう:

    リーリー

    ご覧のとおり、型は arr にあるものとまったく同じではありません。コンパイラは型を拡張して、配列要素を変更できるようにします。配列が読み取り専用であることをコンパイラに知らせるには、const アサーション:

    を使用する必要があります。 リーリー

    これでうまくいきました。これは、fooに渡される配列を読み取り専用に設定する必要があることを意味します。また、読み取り専用配列は、渡してみた場合に得られる可変配列のスーパーセットであるためです。読み取り専用配列を配列に変換すると、エラーが発生します:

    リーリー

    したがって、foo内のすべての配列型を読み取り専用に更新します。配列は 2 次元であるため、内部配列も読み取り専用になり、配列の制約は読み取り専用配列の読み取り専用配列である必要があることに注意してください。 リーリー ###テスト:### リーリー

    しかし、まだ問題がいくつかあります。たとえば、タプルの最初の要素が

    Variable

    である場合、2 番目のパラメータも数値ではなく7 でなければならないことを意味します。つまり、数値である7のプリミティブを取得する必要があるということです。これは、私のtype-samuraiオープン ソース プロジェクトのToPrimitiveユーティリティ タイプを使用して実行できます。 リーリー更新機能:リーリーもう 1 つの問題は、現在の p>foo

    実装で推論された型が

    number[]

    である場合、読み取り専用の配列が許可されないことです。 リーリー修正は非常に簡単です。推論された型が配列であるかどうかを確認し、その要素型を取得して、読み取り専用の ElementType[]をタプルの 2 番目のパラメーターとして渡します。 リーリー ###テスト:### リーリー厄介な点は、どこでもconst アサーション

    を使用する必要があることです。 Typescript

    5.0 では、

    const 型パラメータ

    なので、

    const アサーション

    :を回避できます。 リーリー残念ながら、Tを型として直接割り当てるのではなく、パラメーターを使用して何かを行うため、これらを使用することはできません。 リーリーつまり、現時点では、const アサーションが期待どおりに動作することを保証する唯一の方法です。

    プレイグラウンドへのリンク

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!