Как ввести JSX с другими типами, кроме React $ Element с типом потока?

Я использую тип потока с Vue.js и добавил объявления типов для Vue.js. Затем я также использую синтаксис JSX с babel-plugin-transform-vue-jsx.

Хотя я хочу ввести теги JSX как VNode, механизм потока определяет тег JSX как React $ Element, поэтому он не работает.

Есть ли кто-нибудь, кто знает, как заставить движок потока определить JSX как другой тип или знает другой хороший способ решить эту проблему?

Мне нужна ваша помощь.

Спасибо.

Целые коды здесь. https://github.com/kentrino/vue-js-webpack-flowtype-example

import style from './Test.css';

const test: ComponentOptions = {
  render (h): VNode {
    return <div><h1 class={style.red}>Yeah!! This is test.</h1></div>
//          ^^^^^ React$Element. This type is incompatible with
//            5:   render (h: any): VNode {
//                                  ^^^^^ VNode
  },
  name: 'Test'
}

person Kentrino    schedule 03.02.2017    source источник
comment
Я собираюсь попытаться сделать то же самое... (использовать тип потока и JSX с библиотекой, отличной от React). Я дам вам знать, что узнаю.... Но отсутствие ответов здесь означает, что это может выглядеть не так. хорошо для нас...   -  person Ray Perea    schedule 09.02.2017


Ответы (1)


Вы можете заставить Flow использовать что-то другое, кроме React, для проверки типов вашего JSX. Просто поместите тег @jsx вверху вашего файла (я поставил свой прямо под тегом потока).

// @flow
// @jsx somethingBesidesReact.createElement

В вашем случае вы используете Vue и плагин babel-plugin-transform-vue-jsx для преобразования вашего JSX, который просто переводится в h

https://github.com/vuejs/babel-plugin-transform-vue-jsx

Так что в вашем случае это должно сработать

// @flow
// @jsx h
import style from './Test.css';

const test: ComponentOptions = {
  render (h: any): VNode {
    return <div><h1 class={style.red}>Yeah!! This is test.</h1></div>
  },
  name: 'Test'
}

export default test;
person Ray Perea    schedule 11.02.2017
comment
Большое спасибо! - person Kentrino; 19.01.2018