You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在启用verbatimModuleSyntax时定义自定义JSX命名空间?

解决verbatimModuleSyntax下自定义TSX渲染器的JSX类型导出问题

问题原因

开启verbatimModuleSyntax后,TypeScript会严格遵循ES模块规范,禁止使用export import JSX = JSXInternal这类混合旧式命名空间与ES模块的语法,这就是你遇到报错的核心原因。

解决办法

方法1:用类型别名替换旧式导出

直接在h的命名空间内用类型别名关联JSXInternal,完全符合ES模块规范:

// h.ts
import type { JSXInternal } from './jsx.js';

export function h(props: any): any {}

export namespace h {
  // 用类型别名替代不被允许的export import语法
  export type JSX = JSXInternal;
}

方法2:模块级别导出JSX命名空间(推荐)

如果不需要把JSX类型嵌套在h的命名空间下,直接在模块级别导出JSX命名空间并继承JSXInternal的类型,结构更清晰:

// h.ts
import type { JSXInternal } from './jsx.js';

export function h(props: any): any {}

// 模块级别导出JSX命名空间,继承内部定义的元素类型
export namespace JSX {
  export interface IntrinsicElements extends JSXInternal.IntrinsicElements {}
  // 若JSXInternal包含其他类型(比如Element、组件Props),也需在此继承
}

配套TS配置调整

在tsconfig.json里配置JSX相关选项,让TypeScript正确识别你的自定义渲染器:

{
  "compilerOptions": {
    "verbatimModuleSyntax": true,
    "jsx": "react", // 或react-jsx,根据你的渲染逻辑选择
    "jsxFactory": "h", // 指定JSX转换使用的工厂函数为h
    "jsxImportSource": "./path-to-your-module" // 指向你的模块路径或包名
  }
}

内容的提问来源于stack exchange,提问作者Harshal Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:25:13