Maison  >  Questions et réponses  >  le corps du texte

Typescript : liste dynamique à partir d'un tableau de tuples, pas d'intersection

<p><pre class="brush:php;toolbar:false;">const intents = ["primaire", "secondaire", "accent", "danger"] comme const; const ButtonSizes = ["petit", "moyen", "grand"] as const; tapez IntentType = (type d'intentions)[numéro] ; tapez SizeType = (type de taille de bouton)[nombre] ; tapez ButtonProps = { intention ? : IntentType ; taille ? : Type de taille ; } & { [K dans IntentType comme `${Lowercase<K>}`] ? : booléen ; };</pré> <p> </p> <p>或者 喜欢 </p> <p>maintenant, si j'écris le code de manière plus statique, 喜欢:</p> <pre class="brush:php;toolbar:false;">type ButtonProps = { intention ? : « primaire » | "secondaire" | "accent" | "danger"; taille?: "petit" | "moyen" | "grand" ; primaire ? : booléen ; secondaire ? : booléen ; accent ? : booléen ; danger ? : booléen ; }</pré> <p> <p>第一个示例有效,但由于某种原因 VUE 抛出错误</p> <blockquote> <p>内部服务器错误:[@vue/compiler-sfc] DefineProps() est un outil de recherche en ligne 或文字类型。</p> </blockquote> <p> <p>
P粉163951336P粉163951336436 Il y a quelques jours445

répondre à tous(1)je répondrai

  • P粉384244473

    P粉3842444732023-09-01 18:26:56

    Étant donné que l'erreur indique "Référence à une interface ou un type littéral", je suppose que définir ButtonProps comme une interface étendant un type de base devrait fonctionner :

    type IntentAndSize = {
      [K in IntentType as `${Lowercase<K>}`]?: boolean;
    };
    
    interface ButtonProps extends IntentAndSize {
      intent?: IntentType;
      size?: SizeType;
    }

    Aire de jeux

    répondre
    0
  • Annulerrépondre