Skip to content

brandonpittman/gridsome-plugin-typed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gridsome-plugin-typed

Adds TypeScript and TSX support for Gridsome.

Install

yarn add typescript ts-loader fork-ts-checker-webpack-plugin gridsome-plugin-typed @vue/babel-preset-jsx @babel/plugin-proposal-export-default-form babel-preset-vca-jsx

Usage

In your .vue files, set the script lang="ts" or script lang="tsx"

Set up your babel.config.js. This is to let you return JSX and TSX straight from setup() functions using the Vue Composition API as well.

module.exports = {
  presets: [
    "vca-jsx",
    [
      "@vue/babel-preset-jsx",
      {
        "injectH": false
      }
    ]
  ],
  plugins: [
    "@babel/plugin-proposal-export-default-from"
  ]
}

You'll need to include some type declarations too.

// src/types/jsx.d.ts
import Vue, { VNode } from 'vue'
import { ComponentRenderProxy } from '@vue/composition-api'

declare global {
  namespace JSX {
    // tslint:disable no-empty-interface
    type Element = VNode;
    // tslint:disable no-empty-interface
    type ElementClass = ComponentRenderProxy;
    interface ElementAttributesProperty {
      $props: any; // specify the property name to use
    }
    interface IntrinsicElements {
      [elem: string]: any;
    }
  }
}

// src/types/vue-shims.d.ts
declare module "*.vue" {
  import Vue from "vue";
  export default Vue;
}

Future

I submitted a PR for Gridsome to allow you to use .jsx and .js files as page files. I got the same thing working with .ts and .tsx files, but I'm not sure if the Gridsome team has any interest in supporting that feature. For the meantime, you can use TypeScript in .vue files!

About

Use TypeScript and TSX in your Gridsome project.

Resources

Stars

Watchers

Forks

Packages

No packages published