検索

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

書き換えられたタイトルは次のとおりです: VueJS Typescript v-model 型 'number' を型 'Nullable<string>' に割り当てることはできません

<p>つまり、私は Typescript と VueJS、そしてそれらの新機能すべてを初めて使用します。 </p><p> すべて期待どおりに動作しますが、typescript エラーを取り除くことができず、同時に v-model を使用できません。 </p><p> メンバーが自分のプロパティを検査および変更するためのネットワーク ビューを開発しています。 APIから会員データを取得してPiniaStoreに保存しています。これは、メンバーが数値と文字列であることを必要とする入力フィールドがいくつかあることを意味します。私の知る限り、v-modelは入力フィールドに最適な選択です。 </p> <pre class="brush:bash;toolbar:false;"> 型 'string |number | null | unknown' は型 'Nullable<string>' に割り当てることができません。 タイプ「number」をタイプ「Nullable<string>」に割り当てることはできません。 </pre> <p>このエラーに関するスタックオーバーフローの質問に対する提案された解決策はすべて (これやこのエラーなど)、私の問題には当てはまりません。悪い回避策を見つけました。v-model の代わりにテンプレート ブロックで変更イベントを使用するのが好きではなく、スクリプトでも同じエラーが発生しましたが、<code>//@ts-ignore< /code> で無視しました。 </p> <p>まず第一に、私が本当に求めているのは、VueJs テンプレート ブロック内の typescript エラーをコメントアウトする方法です。これはすでにここで質問されています。 </p><p> 次に、typescript エラーを発生させずにこの問題を解決するにはどうすればよいでしょうか? </p> <p>以下のコードを見ると、<code>v-model</code> でこのエラーが発生していますが、修正方法がわかりません: </p> <pre class="brush:bash;toolbar:false;"><スクリプト セットアップ lang="ts"> import { useMembershipStore } from "@/stores/membership"; const membersStore = useMembershipStore(); membershipStore.getMembership(); const {メンバーシップ} = storeToRefs(membershipStore); 関数 save() { if (メンバーシップ.値) { membershipStore.updateMembership(membership.value); } } </スクリプト> <テンプレート> <div v-if="メンバーシップ === null" class="loading"> <h2>読み込み中</h2> </div> <div v-else class="メンバーテーブル"> <div v-for="(値, キー) in Object.keys(メンバーシップ)" > <br /> <InputText タイプ="テキスト" v-model="メンバーシップ[メンバーシップのタイプのキーとしての値]" /> </div> <ボタン @click="save()" /> </div> </テンプレート> </pre> <p>これは私の型定義です: <strong>membershipstore.ts</strong></p> <pre class="brush:bash;toolbar:false;">エクスポート タイプ MembershipStoreState = { メンバーシップ: メンバー | null; }; </pre> <p><strong>type.ts</strong></p> <pre class="brush:bash;toolbar:false;">エクスポート インターフェイス メンバー { ID番号; ユーザー ID?: 文字列; ユーザー属性: 文字列 | null; create_attr?: 文字列 | null; admin_attr?: 文字列 | null; } </pre> <p><code>Nullable<string></code> 型がどこから来たのかもわかりました。これは、コンポーネント InputText の PrimeVues タイプ定義から取得されます。これは、次の場所にあります: </p> <pre class="brush:bash;toolbar:false;">エクスポート インターフェイス InputTextProps extends InputHTMLAttributes { /*** コンポーネントの値。*/ modelValue?: Null 可能<string>; } </pre> <p>完全なコード例はここにあります</p><p> エラーの回避策を含む変更イベントを使用した完全なコード例</p>
P粉863295057P粉863295057463日前589

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

  • P粉779565855

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

    ローダーをチェックするために membership: Member|null を定義していると思います

    これを試すことができます

    リーリー

    HTML内

    リーリー

    Object.keys(membership).length === 0 は、インターフェイスのキーが設定されているかどうかを確認します。そうでない場合は、true が返され、Loading が表示されます。

    返事
    0
  • キャンセル返事