angular - TemplateRef 类型检查/声明类型
问题描述
假设我有一个显示数据列表的泛型组件:
interface DataProvider<T> {
getData(): T[];
}
...
template: '<div *vsFor="let item in dataProvider.getData()">
<ng-container *ngTemplateOutlet="rowTemplate; context:{item: item}">
</ng-container>
</div>'
...
class AwesomeList<T> {
@Input dataProvider: DataProvider<T>;
@Input rowTemplate: TemplateRef<T>;
}
使用时出现一些问题:
<awesome-list [dataProvider]="provider" [rowTemplate]="template"></awesome-list>
<ng-template #template let-object="item">
{{object.name}} // Here, type of object is unclear (?)
</ng-template>
那么有什么方法可以在这里定义对象/项目类吗?
PS所有这些工作都很好,但我想以严格的类型、IDE中的自动完成等结束。
解决方案
根据角度文档,您可以通过将标志“strictTemplates”和“fullTemplateTypeCheck”设置为 true 来实现这一点(在此处查看更多信息:https ://angular.io/guide/template-typecheck )
我在stackblitz上做了一个repro,遗憾的是我认为你没有看到stackblitz这样的错误,你可以在本地复制/粘贴它,看看它是否适合你(https://stackblitz.com/edit/angular-strict -template-example?file=src/app/app.component.html )
请注意,这仅与角度编译相关,我不确定 VS Code 是否会为您提供自动完成功能
编辑:坏消息我在本地尝试将标志设置为 true 但它不起作用(对我来说,文档令人困惑,因为它说“推断出正确类型的组件/指令,包括泛型。”)@amakhrov 引用了解释这一点的问题功能尚未准备好 https://github.com/angular/angular/issues/28731
推荐阅读
- c - 我应该如何修复错误“比数据参数更多的 '%' 转换”?
- tensorflow - 为什么 Keras 模型仅使用 imagenet 权重实例化?
- html - 带有 Bootstrap 和 Django 的轮播
- ios - SwiftUI:API URL 获取失败
- android - 如何让 Webview 超链接在 webview 应用程序而不是浏览器中打开
- javascript - DOM 元素转换为整数并将它们转换为总时间量 - 小时/分钟 parseFloat
- c# - 如何使用 foreach 循环生成文本框以在 C# Windows 窗体中显示问题列表
- spring-boot - 健康指标Spring集成测试NotFound失败
- sql-server - 使用 HASHBYTES 函数对数据进行哈希处理
- c++ - 我无法获得以下代码的输出