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 工作。你可以试试这个修复
- 从 visual studio
卸载您的项目
- 转到您的项目主目录并打开 "csproj" 文件。
将 TypeScriptExperimentalDecorator 添加到此部分,如图所示
- 重新加载 Visual studio 中的项目。
在 this 位置查看更多详细信息。
- 打开 VScode。
- 按 ctrl+逗号
- 按照 screen shot 中的说明进行操作
- 搜索关于
实验装饰器
- 编辑它
我必须在 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。
我收到警告...
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 工作。你可以试试这个修复
- 从 visual studio 卸载您的项目
- 转到您的项目主目录并打开 "csproj" 文件。
将 TypeScriptExperimentalDecorator 添加到此部分,如图所示
- 重新加载 Visual studio 中的项目。
在 this 位置查看更多详细信息。
- 打开 VScode。
- 按 ctrl+逗号
- 按照 screen shot 中的说明进行操作
- 搜索关于 实验装饰器
- 编辑它
我必须在 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。