对于打字稿,当前未启用“decorators-legacy”的错误,事件我设置了experimentalDecorators和emitDecoratorMetadata为真
Posted
技术标签:
【中文标题】对于打字稿,当前未启用“decorators-legacy”的错误,事件我设置了experimentalDecorators和emitDecoratorMetadata为真【英文标题】:for typescript the error for 'decorators-legacy' isn't currently enabled, event I set experimentalDecorators and emitDecoratorMetadata is true 【发布时间】:2020-11-30 19:43:47 【问题描述】:我将 typeorm 与 next.js 和 typescript 一起使用,我的 tsconfig.json 是:
"compilerOptions":
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext",
"es5",
"es6"
],
"allowJs": true,
"skipLibCheck": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"jsx": "preserve"
,
include: ...
我设置experimentalDecorator 为true。我的打字稿是 3.9.7,我的 typeorm 是 0.2.25。 编译错误是:
error - ./db/entity/User.ts:7:1
Syntax error: Support for the experimental syntax 'decorators-legacy' isn't currently enabled:
5 |
6 |
> 7 | @Entity()
| ^
8 | export class User
9 |
10 | @PrimaryGeneratedColumn()
我已经启用了 emitDecoratorMetadata, Hoe 来为 tsconfig.json 启用 decorators-legacy
【问题讨论】:
【参考方案1】:如果您只想导入 User 类型,并使用 TypeScript >= 3.8,您可以使用 type-only imports 来执行此操作。只需在import
-关键字后添加type
。这确保了只导入类的类型,从而避免了整个装饰器问题,因为类型被 babel 忽略/删除。
import type User from "path/to/db/entity/User";
【讨论】:
【参考方案2】:我的一个同事刚刚遇到了同样的问题:这是 Babel 抛出的一个错误,它无法处理类装饰器。 事实上,即使你在代码中不使用 Babel,Next.JS 也会在前端使用。
确保不要在前端代码中导入 ./db/entity/User.ts
或任何其他 TypeORM 类。
【讨论】:
在一个后端应用程序中出现同样的问题。该应用程序具有间接 babel 依赖项。当我创建 .babelrc 时,又出现了另一个错误。不创建 .babelrc 可以解决吗?以上是关于对于打字稿,当前未启用“decorators-legacy”的错误,事件我设置了experimentalDecorators和emitDecoratorMetadata为真的主要内容,如果未能解决你的问题,请参考以下文章
打字稿 - 未捕获的 ReferenceError:未定义导出