错误 TS2554:预期 2 个参数,但使用 @ViewChild 得到 1 个

Posted

技术标签:

【中文标题】错误 TS2554:预期 2 个参数,但使用 @ViewChild 得到 1 个【英文标题】:error TS2554: Expected 2 arguments, but got 1 with @ViewChild 【发布时间】:2019-10-21 18:08:13 【问题描述】:

我使用 ViewChild 如下:

@ViewChild("InternalMedia") localStream;
@ViewChild("emoji") mEmoji;

在 angular-7.x 之前工作正常

一旦我将它升级到 angular-8.x,它就开始出现以下错误

.../call_emoji/component.ts(41,4): error TS2554: Expected 2 arguments, but got 1.

我检查了https://angular.io/api/core/ViewChild,当我将其更改为

@ViewChild("InternalMedia",static:false) remoteStream;

它有效。我没有得到 static 的作用以及像以前一样工作的价值是什么?

【问题讨论】:

【参考方案1】:

根据 Angular 文档静态检查

是否在更改检测运行之前解析查询结果(即仅返回静态结果)。如果未提供此选项,编译器将退回到其默认行为,即使用查询结果来确定查询解析的时间。如果任何查询结果在嵌套视图中(例如 *ngIf),则查询将在更改检测运行后解析。否则,它将在更改检测运行之前解决。

这实际上决定了何时运行查询来检索元素。如果设置为 false,则查询将在检测到任何更改后运行。如果设置为 true,它将立即运行。

有关更多信息以及为什么包含此选项,请参阅this Github issue。

您可能正在寻找的行为是将static 设置为false。这将导致旧行为。但是,如果您的组件视图不是动态的(例如您不使用 *ngIf),您应该能够安全地将其设置为 true。

【讨论】:

不是说 Angular 2 之后一切都将向后兼容吗? @ps0604 据我所知没有。文档中的This 页面甚至谈到了重大更改以及它们将如何处理它们。【参考方案2】:

迁移到 Angular 8 后,您应该手动声明它是否是静态的

@ViewChild(QuilldEditorComponent, static: true) quillEditorComponentInstance;

如果您还有其他问题,请向他们提问或了解更多详情,请阅读本期 https://github.com/angular/angular-cli/issues/14553 或查看官方文档 https://angular.io/guide/static-query-migration

// query results available in ngOnInit
@ViewChild('foo', static: true) foo: ElementRef; 

OR

// query results available in ngAfterViewInit
@ViewChild('foo', static: false) foo: ElementRef;

【讨论】:

以上是关于错误 TS2554:预期 2 个参数,但使用 @ViewChild 得到 1 个的主要内容,如果未能解决你的问题,请参考以下文章

*.directive.spec.ts 中的错误 TS2554

打字稿错误:预期 0-1 个参数,但得到 2 个

使用 Redux Toolkit 的调度操作需要两个参数

请我需要帮助,我是 react-native-reanimated 的新手,我遇到以下错误

预期 3-4 个参数,但得到 2.ts FirebaseX Ionic 本机插件

预期 2 个参数,但得到 1 个。 [重复]