1.2.7 • Published 1 month ago

vue-tsx-transformer v1.2.7

Weekly downloads
-
License
ISC
Repository
github
Last release
1 month ago

Vue2 Tsx Transformer

Installation

$ npm install vue-tsx-transformer --save-dev

Usage

import VueTsxTransformer from "vue-tsx-transformer";

export default {
  // ...
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: [
          {
            loader: "ts-loader",
            options: {
              transpileOnly: true,
              getCustomTransformers: () => ({
                before: [
                  VueTsxTransformer({
                    // options
                  }),
                ],
              }),
            },
          },
        ],
      },
    ],
  },
};

Changelog

  • 2024-03-15 merge spread operator into attrs or props
  • 2023-06-28 add JsxFragment transform
  • 2022-12-14 fix select v-model, optimize directives merge
  • 2022-09-19 fix native component v-model

Syntax

Content

  • Automatic h injection syntactic sugar
  • vModel syntactic sugar
render() {
  return <p>hello</p>
}

with dynamic content:

render() {
  return <p>hello { this.message }</p>
}

when self-closing:

render() {
  return <input />
}

with a component:

import MyComponent from "./my-component";

export default {
  render() {
    return <MyComponent>hello</MyComponent>;
  },
};

Attributes/Props

render() {
  return <input type="email" />
}

with a dynamic binding:

render() {
  return <input
    type="email"
    placeholder={this.placeholderText}
  />
}

with the spread operator (object needs to be compatible with Vue Data Object):

The spread operator will be merged into the attrs or props object for ts typing checking after v1.2.4.

// not supported > v1.2.4
render() {
  const inputAttrs = {
    type: 'email',
    placeholder: 'Enter your email'
  }
  return <input {...{ attrs: inputAttrs }} />
}
### Slots

named slots:

```tsx
render() {
  return (
    <MyComponent>
      <header slot="header">header</header>
      <footer slot="footer">footer</footer>
    </MyComponent>
  )
}

scoped slots:

render() {
  const scopedSlots = {
    header: () => <header>header</header>,
    footer: () => <footer>footer</footer>
  }

  return <MyComponent scopedSlots={scopedSlots} />
}

Directives

<input vModel={this.newTodoText} />

with a modifier: Not Supported, Follow the type validation of TSX

v-html:

<p domPropsInnerHTML={html} />
1.2.7

1 month ago

1.2.6

2 months ago

1.2.5

2 months ago

1.2.4

11 months ago

1.2.3

1 year ago