Der umgeschriebene Titel lautet: VueJS Typescript V-Model-Typ „Nummer' kann nicht dem Typ „Nullable<string>' zugewiesen werden.
P粉863295057
2023-08-25 13:27:11
<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>
我想您正在定义
membership: Member|null
来检查加载程序你可以试试这个
在 HTML 中
Object.keys(membership).length === 0
将检查您是否已填充界面的任何键,否则它将返回 true 并且您的正在加载
将可见