書き換えられたタイトルは次のとおりです: VueJS Typescript v-model 型 'number' を型 'Nullable<string>' に割り当てることはできません
P粉863295057
P粉863295057 2023-08-25 13:27:11
0
1
606
<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粉863295057
P粉863295057

全員に返信(1)
P粉779565855

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

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

リーリー

HTML内

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート