繁体   English   中英

没有 React 的 Typescript 中的 JSX

[英]JSX in Typescript without React

我试图在没有反应的情况下使用带有 jsx 的打字稿。 它不起作用。 我总是在 tsconfig.json 中放一个"jsx": "preserve" 但我不明白我接下来要做什么。当我编译 .tsx 文件时,webpack 抛出错误

ERROR in ./core/Navbar.tsx Module parse failed: /home/ubuntu/Desktop/framework/node_modules/ts-loader/index.js!/home/ubuntu/Desktop/framework/core/Navbar.tsx Unexpected token (9:15)

You may need an appropriate loader to handle this file type. 我阅读了文档,但我不明白如何在项目中使用全局 jsx 模块。 是否可以在没有反应的情况下使用 typescript + jsx?

在此处输入图片说明 我的 App.tsx 类

[我的 App.tsx 类 [2]

webpack 编译文件时出错控制台错误

我刚做了这个,也许它会有所帮助

索引.tsx

export const JSX = {
  createElement(name: string, props: { [id: string]: string }, ...content: string[]) {
    props = props || {};
    const propsstr = Object.keys(props)
      .map(key => {
        const value = props[key];
        if (key === "className") return `class=${value}`;
        else return `${key}=${value}`;
      })
      .join(" ");
      return `<${name} ${propsstr}> ${content.join("")}</${name}>`;
  },
};

export default JSX;

外部.d.ts

declare module JSX {
  type Element = string;
  interface IntrinsicElements {
    [elemName: string]: any;
  }
}

配置文件

"jsx": "react",
"reactNamespace": "JSX",

测试一下

import JSX from "./index";

function Hello(name: string) {
    return (
        <div className="asd">
            Hello {name}
            <div> Hello Nested </div>
            <div> Hello Nested 2</div>
        </div>
    );
}

function log(html: string) {
    console.log(html);
}

log(Hello("World"));

如果您使用 jsx: prevserve,这意味着 Typescript 编译器将输出 .jsx 文件而不是将其编译为 .js,因此,您最终将需要 Babel 之类的东西来转译您的 jsx,因为您的浏览器无法运行 jsx文件。

老实说,我不确定您要做什么,但是您应该使用 jsx:react 或 jsx:preserve + transpiler

查看 Stefan Baumgartners 的博客条目“JSX 是语法糖” 它解释了如何使用干净、易于阅读的代码在运行时将 JSX 转换为 DOM 元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM