Heim  >  Fragen und Antworten  >  Hauptteil

Der umgeschriebene Titel lautet: VueJS Typescript V-Model-Typ „Nummer“ kann nicht dem Typ „Nullable<string>“ zugewiesen werden.

<p>Ich bin also neu bei Typescript und VueJS und all ihren neuen Funktionen. </p><p> Alles funktioniert wie erwartet, aber ich kann die Typoskriptfehler nicht beseitigen und gleichzeitig V-Model verwenden. </p><p> Ich entwickle eine Netzwerkansicht, damit Mitglieder ihre Eigenschaften überprüfen und ändern können. Ich erhalte Mitgliedsdaten von der API und speichere sie im PiniaStore. Das bedeutet, dass ich mehrere Eingabefelder habe, deren Mitglieder Zahlen und Zeichenfolgen sein müssen. Das AFAIK-V-Modell ist die beste Wahl für Eingabefelder. </p> <pre class="brush:bash;toolbar:false;"> Der Typ „string number |“ kann nicht dem Typ „Nullable<string>“ zugewiesen werden. Der Typ „Nummer“ kann nicht dem Typ „Nullable<string>“ zugewiesen werden. </pre> <p>Keine der vorgeschlagenen Lösungen für Stackoverflow-Fragen zu diesem Fehler (wie diese oder diese) passt zu meinem Problem. Ich habe eine schlechte Problemumgehung gefunden, ich verwende kein Änderungsereignis im Vorlagenblock anstelle des V-Modells und habe den gleichen Fehler in meinem Skript erhalten, aber durch <code>//@ts-ignore< /code> </p> <p>Zuallererst möchte ich wissen, wie man Typoskriptfehler in VueJs-Vorlagenblöcken auskommentiert, was hier bereits gefragt wurde. </p><p> Zweitens: Wie kann ich dieses Problem lösen, ohne Schreibfehler zu bekommen? </p> <p>Wenn ich mir den Code unten ansehe, erhalte ich diesen Fehler bei <code>v-model</code> und weiß nicht, wie ich ihn beheben kann: </p> <pre class="brush:bash;toolbar:false;"><script setup lang="ts"> import { useMembershipStore } aus "@/stores/membership"; const memberStore = useMembershipStore(); MitgliedschaftStore.getMembership(); const { Mitgliedschaft } = storeToRefs(membershipStore); Funktion save() { if (membership.value) { MitgliedschaftStore.updateMembership(membership.value); } } </script> <Vorlage> <div v-if="membership === null" class="loading"> <h2>Laden</h2> </div> <div v-else class="members-table"> <div v-for="(value, key) in Object.keys(membership)" <br /> <InputText type="text" v-model="Mitgliedschaft[Wert als Schlüssel des Mitgliedschaftstyps]" /> </div> <Button @click="save()" </div> </template> </pre> <p>Das ist meine Typdefinition: <strong>membershipstore.ts</strong></p> <pre class="brush:bash;toolbar:false;">export type MembershipStoreState = { Mitgliedschaft: Mitglied |. null; }; </pre> <p><strong>type.ts</strong></p> <pre class="brush:bash;toolbar:false;">export interface Member { id?: Nummer; user_id?: string; user_attr: string |. null; create_attr?: string |. null; admin_attr?: string |. null; } </pre> <p>Ich habe auch herausgefunden, woher der Typ <code>Nullable<string></code> kommt. Es stammt aus der PrimeVues-Typdefinition seiner Komponente InputText, die hier zu finden ist: </p> <pre class="brush:bash;toolbar:false;">export interface InputTextProps erweitert InputHTMLAttributes { /*** Wert der Komponente.*/ modelValue?: Nullable<string>; } </pre> <p>Vollständige Codebeispiele finden Sie hier</p><p> Vollständiges Codebeispiel mit Änderungsereignissen und Problemumgehung für Fehler</p>
P粉863295057P粉863295057392 Tage vor528

Antworte allen(1)Ich werde antworten

  • P粉779565855

    P粉7795658552023-08-26 09:26:56

    我想您正在定义 membership: Member|null 来检查加载程序

    你可以试试这个

    export type MembershipStoreState = {
      membership: Member;
    };

    在 HTML 中

    <template>
      <div v-if="Object.keys(membership).length === 0" class="loading">
        <h2>Loading</h2>
      </div>
      <div v-else class="members-table">
        <div v-for="(value, key) in membership" > // thanks to @Dimava's comment
          <br />
          <InputNumber v-if = "key === 'id' || key === 'user_id'"
            v-model="membership[key]"
          />
          <InputText type="text" v-else
            v-model="membership[key]"
          />
        </div>
        <Button @click="save()" />
      </div>
    </template>
    

    Object.keys(membership).length === 0 将检查您是否已填充界面的任何键,否则它将返回 true 并且您的正在加载将可见

    Antwort
    0
  • StornierenAntwort