ホームページ  >  に質問  >  本文

TypeScript で、事前定義されたリストの単語のみを含む文字列である型を定義する方法

TypeScript で難しい問題があります。

プロップサイズのアイコンコンポーネントがあるとします。サイズは「2」、「4」、「6」のいずれかです。これらの値を事前定義された追い風クラスにマッピングします。

だから私は次のように入力しました

リーリー ###すべては順調です。しかし、画面サイズに基づいて異なるサイズを使用したい場合はどうすればよいでしょうか?ですので、スムーズに進む良い文法を身につけたいと思っています。

そこで、Icon コンポーネントを次のように書き直しました:

リーリー

これはうまく機能しますが、どうやって入力すればよいでしょうか? TypeScript は将来正規表現をサポートする予定だと読みました。これで作業が簡単になりますが、今入力してもいいですか?

これは実際のコンポーネントではないため、改善方法について良い提案はしないでください。サイズ属性をコーディングしたとおりに機能させるために、どのように入力すればよいのか疑問に思っています。

P粉139351297P粉139351297255日前433

全員に返信(1)返信します

  • P粉509383150

    P粉5093831502024-01-11 10:57:21

    まず、sizeMap をグローバル スコープに抽出し、constassert を使用してコンパイラーにこれが不変定数であることを知らせ、型の拡張を制限する必要があります。 ## リーリー

    次に、

    sizeMap: のキーのタイプを取得する必要があります。 リーリー ###実装: 文字列を受け入れ、文字列が有効な場合はそれを返し、そうでない場合は

    never

    を返す型を作成します。 疑似コード:

    型に

    T

    - 検証する文字列、Original - 元の文字列、Already Used - 使用されたキーの和集合を受け入れさせます。

    T

    が空の文字列の場合

      返却
    • オリジナル

      それ以外の場合、T がサイズ マップのキー (ClassName) で始まり、Alreadyused を除き、その後にスペースと残りの文字列 (break) が続く場合###)。

      この型を再帰的に呼び出し、
    • Rest
    • を文字列として渡して、

      OriginalClassName を追加した Already Used を検証します。それ。 < /code>

      Else
    • T
    がサイズ マップのキーであり、

    Alreadyused を除く 戻る

    オリジナル
      さもないと###
    • 返品決してしない
    • ###成し遂げる:### リーリー サイズを表す共通パラメータを
    • Item
    に追加する必要があります。

    リーリー

    size はコンポーネントではオプションであるため、string | unknownstring

    に変換する

    SizeValue の周囲にラッパーを追加します。それを _SizeValue に渡し、さらにサイズのデフォルト値を追加します: リーリー ###使用法:### リーリー ######遊び場######

    返事
    0
  • キャンセル返事