cari

Rumah  >  Soal Jawab  >  teks badan

Tajuk yang ditulis semula ialah: VueJS Typescript jenis v-model 'nombor' tidak boleh diberikan untuk menaip 'Nullable<string>'

<p>Jadi saya baru menggunakan Typescript dan VueJS serta semua ciri baharunya. </p><p> Semuanya berfungsi seperti yang diharapkan, tetapi saya tidak dapat menyingkirkan ralat skrip taip dan menggunakan model v pada masa yang sama. </p><p> Saya sedang membangunkan paparan rangkaian untuk ahli memeriksa dan menukar sifat mereka. Saya mendapat data ahli daripada API dan menyimpannya dalam PiniaStore. Ini bermakna saya mempunyai beberapa medan input yang memerlukan ahli menjadi nombor dan rentetan. AFAIK v-model ialah pilihan terbaik untuk medan input. </p> <pre class="brush:bash;toolbar:false;"> Taipkan 'nombor rentetan |. Taip 'nombor' tidak boleh diberikan untuk menaip 'Nullable<string>'. </pra> <p>Tiada penyelesaian yang dicadangkan untuk soalan stackoverflow tentang ralat ini (seperti yang ini atau yang ini) sesuai dengan masalah saya. Saya menemui penyelesaian yang buruk, saya tidak suka menggunakan acara perubahan dalam blok templat dan bukannya model v dan saya mendapat ralat yang sama dalam skrip saya tetapi dengan <kod>//@ts-ignore< </p> <p>Pertama sekali, perkara yang saya benar-benar minta ialah cara mengulas ralat skrip taip dalam blok templat VueJs, yang telah ditanya di sini. </p><p> Kedua, bagaimana saya boleh menyelesaikan masalah ini tanpa mendapat ralat skrip taip? </p> <p>Melihat kod di bawah, saya mendapat ralat ini di <code>v-model</code> <pre class="brush:bash;toolbar:false;"><script setup lang="ts"> import { useMembershipStore } daripada "@/stores/membership"; const membershipStore = useMembershipStore(); membershipStore.getMembership(); const {keahlian} = storeToRefs(membershipStore); fungsi simpan() { if (membership.value) { membershipStore.updateMembership(membership.value); } } </skrip> <template> <div v-if="keahlian === null"kelas="memuatkan"> <h2>Memuatkan</h2> </div> <div v-else class="meja ahli"> <div v-for="(nilai, kunci) dalam Object.keys(keahlian)" <br /> <Jenis InputText="teks" v-model="keahlian[nilai sebagai kunci jenis keahlian]" /> </div> <Butang @klik="simpan()" </div> </template> </pra> <p>Ini ialah definisi jenis saya: <strong>membershipstore.ts</strong></p> <pre class="brush:bash;toolbar:false;">export type MembershipStoreState = { keahlian: Ahli |. }; </pra> <p><strong>type.ts</strong></p> <pre class="brush:bash;toolbar:false;">eksport antara muka Ahli { nombor ID; user_id?: string; user_attr: rentetan |. create_attr?: rentetan |. admin_attr?: rentetan |. } </pra> <p>Saya juga mengetahui dari mana jenis <code>Nullable<string></code> Ia datang daripada definisi jenis PrimeVues bagi komponen InputTextnya, yang boleh didapati di sini: </p> <pre class="brush:bash;toolbar:false;">eksport antara muka InputTextProps memanjangkan InputHTMLAttributes { /*** Nilai komponen.*/ modelValue?: Nullable<string>; } </pra> <p>Contoh kod penuh boleh didapati di sini</p><p> Contoh kod penuh menggunakan peristiwa perubahan dengan penyelesaian untuk ralat</p>
P粉863295057P粉863295057463 hari yang lalu590

membalas semua(1)saya akan balas

  • P粉779565855

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

    Saya rasa anda sedang mentakrifkan membership: Member|null 来检查加载程序

    Boleh cuba ni

    export type MembershipStoreState = {
      membership: Member;
    };

    Dalam 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 并且您的正在加载akan kelihatan

    balas
    0
  • Batalbalas