recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment déclarer les données du tableau d'objets dans vue.js + typescript

J'ai ce code dans vue.js 3 + dactylographié, je veux juste déclarer un tableau d'objets dans les données, mais plusieurs erreurs apparaissent

<template>
  <ul >
    <li v-if="!items.length">...loading</li>
    <li v-for="item in items" :key="item.id">
        <!--{{item}}-->
        <!--donde va {{item}} pongo un slot tag con un name y binding el item que voy a utilizar en el parent-->
        <slot name="item" v-bind="item"></slot>

    </li>
  </ul>
</template>

<script lang="ts">
import { defineComponent } from 'vue'


export default defineComponent({
    name: 'child-slot-component',
    data() {
    return {
        items: []
    }
  },
    mounted() {
        setTimeout(() => {
      this.items = [
        { id: 1, body: 'Scoped Slots Guide', username: 'Evan You', likes: 20 },
        { id: 2, body: 'Vue Tutorial', username: 'Natalia Tepluhina', likes: 10 }
      ]
    }, 1000)
    },
})
</script>

<style  scoped>
    ul{
        list-style-type: none;
    }

</style>

l'identifiant, le texte, le nom d'utilisateur et les types similaires "numéro" ou "chaîne" ne peuvent pas être attribués au type "jamais". cs(2322) Parce que dans les données, lors de la déclaration d'un élément avec un tableau vide, il est indiqué property:never et je veux déclarer quelque chose comme ceci : {id:number, body:string,username:string, likes:number}[]

Si ce n'est pas correct, quelle est la bonne façon de gérer cette déclaration à l'aide de TypeScript ou peut-être dois-je configurer tsconfig.json ou quelque chose comme ça

Merci d'avance Oh, l'application fonctionne très bien ! !

Voici mon tsconfig.json :

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "useDefineForClassFields": true,
    "sourceMap": true,
    "baseUrl": ".",
    "types": [
      "webpack-env"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

Voici mon vue.config.js

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true
})

Ma configuration Babel

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}

mes cales-vue.d.ts

/* eslint-disable */
declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

et mon .eslintrc.js

module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/vue3-essential',
    'eslint:recommended',
    '@vue/typescript/recommended'
  ],
  parserOptions: {
    ecmaVersion: 2020
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
  }
}

Juste la configuration par défaut avec vue create app-name

P粉818317410P粉818317410393 Il y a quelques jours756

répondre à tous(1)je répondrai

  • P粉775723722

    P粉7757237222023-11-03 09:05:25

    La définition à l'avance d'un tableau d'éléments avec des types devrait corriger les erreurs TypeScript. Quelque chose comme ceci devrait fonctionner :

    items: [] as { id: number, body: string, username: string, likes: number }[]

    répondre
    0
  • Annulerrépondre