为什么vite中不能使用reflect-metadata

2024-03-01

import "reflect-metadata"

function validate(target: any) {
  let paramtypes = Reflect.getMetadata("design:paramtypes", target);
  console.log(paramtypes);  // undefined
}

@validate
class Log {
  constructor(public readonly xx: string) {}
}

打我启动服务器,打开网页发现paramtypes未定义

tsconfig.json

{
  "compilerOptions": {
    "target": "ESNext",
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "allowJs": false,
    "skipLibCheck": false,
    "esModuleInterop": false,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  },
  "include": ["./src"]
}

Vite使用ESBuild,不支持"emitDecoratorMetadata"在 tsconfig 中,因为 ESBuild 没有实现自己的类型系统。参考这个vitejs/vite#788 https://github.com/vitejs/vite/issues/788有关此主题的更多详细信息。

不过,这个问题有一些解决方法。我采取的一种方法是明确禁用 ESBuild 并使用 SWC。您可以在以下位置找到更多相关详细信息:这个演示 https://github.com/SIGUSR97/decorator-demo/。这是它的 vite 配置文件:

import typescript from "@rollup/plugin-typescript";
import swc from "rollup-plugin-swc";

// import typescript from "rollup-plugin-typescript2";

export default defineConfig({
    plugins: [
        swc({
            jsc: {
                parser: {
                    syntax: "typescript",
                    // tsx: true, // If you use react
                    dynamicImport: true,
                    decorators: true,
                },
                target: "es2021",
                transform: {
                    decoratorMetadata: true,
                },
            },
        }),
    ],
    esbuild: false,
});

SWC 是 ESBuild 的快速替代品,它实现了自己的类型系统,可以毫无问题地发出装饰器元数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么vite中不能使用reflect-metadata 的相关文章

  • Angular 4:在订阅中收到错误消息

    在服务中 有这样的代码 getUser id return this http get http id map res gt res json 在组件中 this myService getUser this id subscribe cu
  • 打字总是抱怨全局模块

    我对打字稿很陌生 无论我尝试安装什么类型 我都会得到 打字错误 消息 尝试将 Angular 编译为外部模块 但它看起来像全局模块 我只是想做 typings install dt angular 我究竟做错了什么 Update 如果您对此
  • TypeScript - 如何从方法的参数推断类泛型类型?

    我正在尝试从稍后调用的方法参数中输入类泛型 在我们调用带有泛型参数的方法之前 类的泛型类型是不知道的 然后 对于任何其他方法 将传递泛型类型 老实说 对我来说 这似乎是一个非常复杂的功能 我什至不确定 TypeScript 是否有办法做到这
  • 尝试使用 ui-router 让一个子视图调用另一个子视图

    我有两个子视图 一个用于类别 一个用于产品 因此是该类别的产品 我希望用户能够选择一个类别并查看该类别的所有产品 所以我在类别控制器中调用一个函数View单击类别行上的按钮 这是函数 self scope viewSalonProducts
  • Karma + JSPM + Typescript - 未找到“.ts.js”

    主要只是想让 Karma JSPM 在加载 ts 文件时发挥良好作用 但绝对没有运气 我看到一个讨论库 https github com Larchy karma jspm typescript coverage tree master一个
  • 无法绑定到“属性 X”,因为它不是“子组件”的已知属性

    在我的项目中 我有一个通用类和一些从该类继承的其他组件 BaseRdnInput ts Injectable export abstract class BaseRdnInput implements ControlValueAccesso
  • 无法在 typeScript 和 Webpack 中使用 p5.js

    我有一个使用图书馆的项目p5 js https github com processing p5 js Details 我的 Webpack 配置是 const path require path module exports entry
  • 使用复合键的 DataLoader

    我了解 dataLoader 如何使用简单的键工作 import DataLoader from dataloader import myService from services service export default gt new
  • 使用 XLSX.readFile 读取文件

    在 Typescript 中 执行时出现错误 无法读取未定义的属性 替换 const xlsx XLSX readFile fileName filename 是现有文件的路径 我读过 readFile https docs sheetjs
  • 为什么 TypeScript 中默认导出接口有限制?

    我正在使用 TypeScript 1 5 beta 并且尝试将接口导出为默认导出 以下代码会在 Visual Studio 和 WebStorm 中导致错误 export default interface Foo 但是 下面的代码可以正常
  • 如何在 TypeScript 中输入这个“as”JSX 属性?

    我正在描述一个 React 库 它通过名为的属性获取组件或 HTML 标签名称as 当给出as属性 它根据该组件 标签名称创建一个元素 并传递任何其他给定的属性 这里有些例子
  • Angular 5 - 谷歌未定义(谷歌地图)

    我想在我的 Angular 5 应用程序上使用谷歌地图 但遇到了一些问题 加载视图时 我在 js 控制台中收到错误 LoginComponent Host ngfactory js sm 1 ERROR ReferenceError goo
  • 字符串类型中不​​存在属性 id

    我的 IDE 中出现以下错误 Property id does not exist on type string typeScript对于这行代码 if customer id id doesn t like customer id ret
  • 'string | 类型的参数字符串[] |解析Qs |解析Qs[] | undefined' 不能分配给'string' 类型的参数

    这个错误一直困扰着我 此代码中出现 Type string is not allocate to type string 错误 export const generateLabelFile functions https onRequest
  • 如何让 Angular 2 选择动态添加的 routerLink 指令

    正如所见这个笨蛋 https plnkr co edit K906Y8KtkgYVgAIsCLqE p preview 我动态地将 HTML 添加到我的一个元素中 这可以归结为 Component selector my comp temp
  • Angular 中的单元测试点击事件

    我正在尝试将单元测试添加到我的 Angular 2 应用程序中 在我的一个组件中 有一个带有 click 处理程序 当用户单击按钮时 将调用在中定义的函数 ts类文件 该函数在 console log 窗口中打印一条消息 表明该按钮已被按下
  • 不要使用对象作为类型

    我收到 lint 错误 不要使用对象作为类型 当我使用对象作为类型时 示例如下 export const myFunc obj object string gt return obj toString 知道我应该为具有未知属性的对象赋予什么
  • Nightmare.js 截图缓冲区长度 0

    我正在运行一个 night js 脚本 我试图在其中截取页面上多个元素的屏幕截图 The first元素被捕获得很好 但折叠下方的所有其他元素都以零长度捕获 我正在努力调试这个问题 任何帮助将非常感激 基本上这个脚本会遍历一个页面并选择al
  • Mapbox 打字稿

    通过关注这个项目 我成功地让 Leaflet 与 Angular 2 和 Webpack 一起工作 Angular 2 传单启动器 https github com haoliangyu angular2 leaflet starter 我
  • TypeScript如何在每个文件中声明全局变量?

    我喜欢定义一个全局可用的助手 global p console log bind console 所以我可以使用p some message 代替console log some message 但 TypeScript 抱怨说p未定义 有

随机推荐

  • 主机名与证书主题不匹配

    当我尝试构建我的 android 项目时 我收到此 gradle 错误 我正在使用 cwac cam 库 错误 主机名 repo commonsware com s3 amazonaws com 与对等方提供的证书主题不匹配 CN s3 a
  • 当我们开始旋转设备时以及旋转完成后将调用什么方法

    我想以编程方式检测 ipad 上的旋转过程 在这种情况下 我想在旋转开始时将布尔值设置为 yes 并在旋转结束后将其设置为 false 是否有任何方法在旋转开始和旋转结束时调用 来自苹果文档 在用户界面开始旋转之前发送到视图控制器 void
  • Flex 项目未包装在列方向容器中

    我想用flex direction column对于特定的布局 我通常使用标准flex direction row 所以我在使用时遇到了一些问题column 我不太知道如何控制它 并且在谷歌上没有找到任何有用的东西 我有一个常规的UL列表
  • 从 picasso 获取图像 uri?

    我有一个相当大的图像 URL 列表 我用它来加载ViewPager使用毕加索 我需要能够通过意图为这些图像提供共享功能 最终通过共享操作提供者 http developer android com guide topics ui actio
  • 从扫描的 GS1 类型条形码中提取信息

    我还想从扫描的 GS1 条形码消息中确定产品信息 例如描述 制造商和有效期 我怎样才能做到这一点 获取以 GS1 应用标识符标准格式存储数据的 GS1 类型条形码所表示的信息涉及两个过程 萃取通过扫描符号获得的 GS1 结构数据中包含的数据
  • CSS Jquery 垂直导航菜单与水平子菜单

    我想创建一个像这样的导航菜单 main item1 main item2 sub item1 sub item2 sub item3 main item3 main item4 我现在看到的是这样的 main item1 main item
  • 在 ASP.NET Boilerplate 中上传图像

    发布图片时 HttpContext Current Request is null 有什么简单的方法可以实现这一目标吗 我在用dropzone js在客户端 项目是带有 Web API ASP NET Core 2 0 模板的 Angula
  • yii2 在 gridview 中更改控制器操作

    我有 ItemController 并在 actionView 中放置了 Itempicture 的 gridview 我希望当我单击图标视图时 更新和删除 然后转到 ItempictureController 那么如何使用不同的控制器更改
  • Unicode - VARCHAR 和 NVARCHAR

    Creating Table Create Table Test1 id Varchar 8000 Inserting a record Insert into Test1 Values 我們的鋁製車架採用最新的合金材料所製成 不但外型輕巧
  • 在浏览器中呈现终端输出

    我有一个文件 其中包含用以下命令捕获的一堆终端日志screen公用事业 这是一个片段 A 0m 27m 24m J 34m 39m base 38 5 242mbase 39m 35m 39m 133 B K 1l gt 2004l A 0
  • 使用 jQuery 离开页面

    我只有一个可用的相对链接 但我想使用 jQuery 导航到这个相对链接 我只在 jQuery 中看到 AJAX 功能 我如何使用 jQuery 或纯 HTML JavaScript 来做到这一点 window location href s
  • Xcode 脚本上的相对路径

    我正在尝试使用 Xcode 运行脚本 但有几个问题 1 Xcode 说将脚本拖放到运行脚本部分 但这会创建一个绝对路径 Users Me Desktop Project etc 如果其他人或 CI 机器检查了代码 这显然是没有用的 如何指定
  • C++ 开关仅适用于整型的理由是什么? [复制]

    这个问题在这里已经有答案了 我觉得C 应该允许switch 超过任何可以比较的类型 而不仅仅是整数类型 看起来很奇怪的是 switch myEnum case myEnumValue1 break case myEnumValue1 bre
  • 创建一个基于查询字符串重定向或使用 .htaccess 的 PHP 页面

    我购买了重力形式 WordPress 插件 但遇到了一个问题 它无法根据用户的输入将用户重定向到特定的 URL 然而 一位开发人员确实告诉我 它具有重定向到页面并根据输入引入查询字符串的功能 我需要做的就是在页面上使用 PHP 根据查询字符
  • 在 Chrome 中选择相同文件时,FileReader onload 不会被触发

    FileReader onload当用 Chrome 选择同一个文件时 第二次不会被触发 而 FireFox 总是会被触发 function uploadCover input if input files input files 0 va
  • 什么是带有 activesupport time_zone 的“循环参数引用”错误?

    我是 ruby on Rails 的新手 我正在尝试创建一个教程 我执行的时候遇到问题rake db migrate hugo ubuntu pin board rake db migrate home hugo rvm gems ruby
  • 如何将构建过程参数放入TFS中的类别中?

    当我打开构建定义时 我可以看到参数被分成带有数字前缀的部分 例如1 基本 2 其他等 但是 当我编辑 xaml 时 没有指示这些类别的定义位置 有人可以提供一些关于它们在参数列表中的位置的指导吗 这是一个类似的问题 只是发布者询问了基于构建
  • 如何以react hook形式验证密码并确认密码?反应钩子形式是否有任何验证属性和消息来显示错误?

    实际上 我尝试验证表单并卡住以验证密码并确认密码 中是否有任何属性useForm在最新版本中验证密码并以反应钩子形式显示消息 请帮忙 实际上 我尝试验证表单并卡住以验证密码并确认密码 中是否有任何属性useForm在最新版本中验证密码并以反
  • 如何读取 csv django http 响应

    在视图中 我使用简单的 csv writer 创建一个完全由 csv 组成的 Django HttpResponse 对象 response HttpResponse content type text csv response Conte
  • 为什么vite中不能使用reflect-metadata

    import reflect metadata function validate target any let paramtypes Reflect getMetadata design paramtypes target console