TypeScript 编译中的实验性装饰器警告

Experimental decorators warning in TypeScript compilation

我收到警告...

Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option `to remove this warning.

...即使我在 tsconfig.json 中的 compilerOptions 具有以下设置:

"emitDecoratorMetadata": true,
"experimentalDecorators": true,

奇怪的是,一些使用装饰器的随机 类 不显示警告,但同一项目中的其他人会显示警告。

什么会导致 TypeScript 编译器出现这种行为?

尽管 VS Code 是 TypeScript 项目的出色编辑器,但它时不时需要一些刺激。通常,在没有警告的情况下,某些文件会导致它崩溃并抱怨。大多数修复似乎是保存并关闭所有打开的文件,然后打开 tsconfig.json。之后,您应该能够无错误地重新打开有问题的文件。如果它不起作用,则起泡、冲洗并重复。

如果您的 tsconfig.json 使用 files 数组指定其源文件,IntelliSense 将仅在相关文件被引用时才能正常运行,以便 VS Code 可以通过遍历输入文件树找到它.

编辑:'reload window' 命令(很久以前添加的)应该可以一劳永逸地解决这个问题。

必须将 typescript.tsdk 添加到我的 .vscode/settings.json

"typescript.tsdk": "node_modules/typescript/lib"

在以下位置打开 settings.json 文件 <project_folder>/.vscode/settings.json

或者您可以从菜单中打开文件,如下所述

VSCode -> File -> Preferences -> Workspace Settings

然后在settings.json文件中添加以下行

{
    "typescript.tsdk": "node_modules/typescript/lib",
    "enable_typescript_language_service": false
}

就是这样。关于'experimentalDecorators'

,您将看不到 warning/error

为了清楚和愚蠢。

1) 打开.vscode/settings.json.

2) 添加"typescript.tsdk": "node_modules/typescript/lib"就可以了。

3) 保存。

4) 重新启动 Visual Studio 代码。

我通过从 tsconfig.json 文件

中删除 "baseUrl": "" 来更正警告

当您为工作区文件夹选择 "src" 文件夹时,也会发生此错误。

选择"src"、"node_modules"所在的根文件夹、文件夹时,错误消失

此答案适用于使用 Javascript 项目而非 Typescript 项目的人。您可以使用 jsconfig.json 文件代替 tsconfig.json 文件。

在具有 装饰器 警告的特殊情况下,您要在文件中写入:

{
    "compilerOptions": {
        "experimentalDecorators": true
    }
}

针对错误行为,最好在配置文件中指定 "include",然后重新启动编辑器。例如

{
    "compilerOptions": {
        "target": "ES6",
        "experimentalDecorators": true
    },
    "include": [
        "app/**/*"
    ],
    "exclude": [
        "node_modules"
    ]
}

在您的项目中创建文件 tsconfig.json ,然后添加此行

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "allowJs": true
    }
}

打开整个项目的文件夹而不是 project-name/src

tsconfig.json is out of src folder

如果您打开项目外部存在的 TS 文件,您可能 运行 遇到此问题。例如,我正在使用 lerna 并从另一个包中打开了一个文件。虽然那个其他包有它自己的带有实验装饰器的 tsconfig,VsCode 不尊重它。

我在 Angular 2 中创建 Injectable 服务时遇到了同样的问题。 我在 tsconfig.json 中准备好了所有的东西。我仍然在 ColorsImmutable 行收到这个错误。

@Injectable()
export class ColorsImmutable {

And fix was to register the Service at module Level or Component Level using the providers array.

providers:[ColorsImmutable ],

如果您在 Visual studio 工作。你可以试试这个修复

  1. 从 visual studio
  2. 卸载您的项目
  3. 转到您的项目主目录并打开 "csproj" 文件。
  4. 将 TypeScriptExperimentalDecorator 添加到此部分,如图所示

    1. 重新加载 Visual studio 中的项目。

this 位置查看更多详细信息。

  1. 打开 VScode。
  2. 按 ctrl+逗号
  3. 按照 screen shot 中的说明进行操作
    1. 搜索关于 实验装饰器
    2. 编辑它

我必须在 vscode 的 settings.json 文件中添加以下内容以删除警告。

"javascript.implicitProjectConfig.experimentalDecorators": true

VSCode -> 首选项 -> 设置

更新

正如 Clepsyd 指出的那样,此设置已被弃用。你现在需要使用

"js/ts.implicitProjectConfig.experimentalDecorators":true

我将此选项添加到 tsconfig.json,"baseUrl": "front-end" 将 front-end 替换为您的 angular-cli 项目的名称。

在 tsconfig.json 中添加以下行并重新启动 VS Code。

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "target": "es5",
        "allowJs": true
    }
}
"javascript.implicitProjectConfig.experimentalDecorators": true

将解决这个问题。

不要强调这一点,但一定要将以下内容添加到

  • 工作区设置而非用户设置

在文件>>首选项>>设置下

"javascript.implicitProjectConfig.experimentalDecorators": 真

这解决了我的问题,我尝试了很多在这里和其他地方找到的建议。

如果您使用cli编译*.ts文件,您可以使用以下命令设置experimentalDecorators:

 tsc filename.ts --experimentalDecorators "true"

请检查您是否在 VS Code 中打开了整个项目的文件夹,而不仅仅是 src 文件夹,因为如果您只打开 src,那么 ts.config.json(位于项目文件夹中)文件将不会在范围内,VS 将无法识别实验装饰器参数。

就我而言,这解决了与此问题相关的所有问题。

我最近在 Visual Studio 2017 下遇到了这个问题 - 原来它是由 VS 的 "feature" 引起的 - ignoring tsconfig.json when Build action is not set to Content.

因此将构建操作更改为内容并重新加载解决方案解决了问题。

文件 -> 首选项 -> 设置

您也可以尝试 ng build。我刚刚重建了应用程序,但现在它不符合要求。

在 Visual Code Studio 中 转到文件 >> 首选项 >> 设置,在搜索字段中搜索 "decorator" 并选中图像中的选项。

事实证明,您可以通过将模块名称与文件名匹配来解决这个问题。如果您有模块名称 BankSpecialtyModule,那么文件名应该是。银行-specialty.module.ts

在 VSCode 中,转到文件 => 首选项 => 设置(或 Control+逗号),它将打开用户设置文件。搜索 "javascript.implicitProjectConfig.experimentalDecorators":正确 然后选中该文件的 experimentalDecorators 复选框,它应该可以修复它。它对我有用。

我在创建新模块并将我的 *.module.ts 和 *-routing.module.ts 文件移动到另一个文件夹时遇到了这个错误。在我删除这两个文件并在新文件夹上创建模块后,它运行良好。 环境 Angular 版本 9 和 Angular CLI 版本 9.1.0

如果您使用 Deno JavaScript 和 TypeScript 运行时并且在 tsconfig.json 或 VSCode ide 设置中启用 experimentalDecorators:true。不起作用。根据 Deno 的要求,当 运行 一个 Deno 文件时,你需要 provide tsconfig 作为标志。参见 Custom TypeScript Compiler Options

在我的特殊情况下,我是 运行 Deno 测试并使用过。

$ deno test -c tsconfig.json

如果它是一个文件,你有这样的东西

 $ deno run -c tsconfig.json mod.ts

我的tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "esnext"
  }
}

对我来说,这个错误“对装饰器的实验性支持是一项功能,在未来的版本中可能会发生变化。(等)”只在 Angular 项目的 VS Code 中发生,并且仅在创建新服务。

上面的解决方案:“在 Visual Code Studio 中转到文件 >> 首选项 >> 设置,在搜索字段中搜索“装饰器”并选中选项 JavaScript › 隐式项目配置:实验装饰器”解决了问题。

此外,在终端 window 中停止 ng serve 并重新启动它使错误在重新编译后消失。

请按照以下步骤删除此警告消息。

第一步: 转到 IDE 中的设置,然后查找或搜索 experimentalDecorators.

第 2 步:然后单击复选框,页面中的警告已被删除。

谢谢编码愉快.........

我在以下语句中遇到了这个错误

对装饰器的实验性支持是一项可能会在未来版本中更改的功能。在 tsconfig 或 jsconfig 中设置 'experimentalDecorators' 选项以删除此 warning.ts(1219)

它在那里是因为 我的组件没有在 AppModule 或 (app.module.ts) 中注册 我只是给了命名空间

从'../app/abc/abc.component'导入{abcComponent};

并且还在声明

中注册了它

在使用

创建新的 Angular 服务时,我在 vscode 中收到此警告
@Injectable({
  providedIn: 'root'
})

语法(而不是在 app.module.ts 中提供服务)。

警告一直存在,直到我在项目的某处引用新服务。一旦服务被使用,警告就会消失。无需 typescript 配置或 vscode 设置更改。

您可以运行使用此代码

 tsc .\src\index.ts --experimentalDecorators "true" --emitDecoratorMetadata "true"

就我而言,我通过在 tsconfig.json 文件中设置 "include": [ "src/**/*"] 并重新启动 vscode 解决了这个问题。 我从 github 问题中得到了这个解决方案:https://github.com/microsoft/TypeScript/issues/9335

我遇到了同样的问题。它已通过其他 class.

与 'decorator warning' 导入 class 修复

我在我的项目中使用了 React 和 Nest。 如果在后端显示此错误,但出于某种原因将这两行添加到 React 的 tsconfig.json 解决了该问题。此外,以上所有内容都不适合我

"compilerOptions": {
    ...
    "experimentalDecorators": true,
    "strictPropertyInitialization": false
},

在我的例子中,我只需要将我创建的组件或模块导入到另一个模块(例如共享模块)中。 VS Code 以某种方式意识到文件存在。

此错误也可能意味着您在 tsconfig.json 中有错误 就我而言,我在图书馆四处走动,但没有修复路径

"extends": "../../tsconfig.base.json",

修复后,错误立即消失,无需重启 VS Code。