No More Posting New Topics!

If you have a question or an issue, please start a thread in our Github Discussions Forum.
This forum is closed for new threads/ topics.

Navigation

    Quasar Framework

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Typescript errors

    Help
    2
    3
    1110
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      Emptyless last edited by

      I am trying to add Typescript support to my App however I am stuck getting the Webpack configuration to work. At the moment I have extended the quasar.conf.js extendWebpack method with:

      cfg.resolve.extensions.push('.ts', '.tsx');
              cfg.module.rules.push({
                test: /\.ts(x?)$/,
                use: [
                  {
                    loader: 'babel-loader',
                  },
                  {
                    loader: 'ts-loader',
                    options: {
                      appendTsSuffixTo: [/\.vue$/],
                    },
                  },
                ],
                include: [
                  './src',
                ],
              });
      

      Then I have for example a TaskList.tsx component (very basic example):

      import { Component, Vue, Prop } from 'vue-property-decorator'
      import { Task, TaskProperties } from './Task'
      import { CreateElement, VNode } from 'vue';
      
      /**
       * Class that collects Task data and renders
       * the loaded tasks using Task child component
       * 
       * @property {String} title: Title of the TaskList
       */
      @Component({
          components: {
              Task
          }
      })
      class TaskList extends Vue {
      
          @Prop(String) title!: string
      
          private tasks: TaskProperties[] = [
              {
                  title: 'Task A',
                  value: true
              },
              {
                  title: 'Task B',
                  value: false
              }
          ]
      
          /**
           * Default Vue Render method.
           * @param {CreateElement} h: JSX Render Factory
           */
          public render (h: CreateElement): VNode {
              const tasks : VNode[] = this.tasks.map((task) => {
                  return (
                      <Task {...task} />
                  )
              })
      
              return (
                  <div>
                      <h5>{this.title}</h5><br />
                      { tasks }
                  </div>
              )
          }
      
      }
      
      export { TaskList }
      

      Which I want to import in App.vue:

      <template>
        <div id="q-app">
          <task-list title="Test"/>
        </div>
      </template>
      
      <script>
      import { TaskList } from './models/tasks/TaskList';
      
      export default {
        name: 'App',
        components: {
          TaskList,
        },
      };
      </script>
      
      <style>
      </style>
      

      But when I run quasar dev I get the error:

      Module parse failed: Unexpected character '@' (11:0)
      You may need an appropriate loader to handle this file type.
      |  * @property {String} title: Title of the TaskList
      |  */
      > @Component({
      |     components: {
      |         Task
      
       @ ./node_modules/vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=script&lang=ts& 8:0-51 13:4-12
       @ ./src/App.vue?vue&type=script&lang=ts&
       @ ./src/App.vue
       @ ./.quasar/app.js
       @ ./.quasar/client-entry.js
       @ multi (webpack)-dev-server/client?http://0.0.0.0:8080 (webpack)/hot/dev-server.js ./.quasar/client-entry.js
      

      It is still using the vue-loader instead of the ts-loader. I have tried lots of loader configs, tsconfigs and tutorials but for some reason I can’t get this to work. Does anyone know why the .tsx file is not handled by ts-loader?

      1 Reply Last reply Reply Quote 0
      • E
        Emptyless last edited by

        I found the problem! For future reference, the problem was in the include part of the quasar.conf.js file where the ./src/ part was probably referencing relative to the node modules directory. Adding:

        const path = require('path')
        const srcDir = path.join(__dirname, 'src')
        

        and using srcDir instead of ‘./src’ resolved the error!

        1 Reply Last reply Reply Quote 0
        • W
          webfacer last edited by

          hi it is old, but i am getting still this error. how did you solve this and where did you set the config, in which line?

          1 Reply Last reply Reply Quote 0
          • First post
            Last post