【发布时间】:2018-08-29 22:59:51
【问题描述】:
背景
我有一个看起来像这样的模板(我正在使用一些组件,它使用它作为重复项的基础,它是 <p-pickList>,但问题并不特定于该组件,仅作为示例)
对于背景,假设我有一个类型 Foo 并且我的组件有一个 foos: Foo[],我将它提供给 [source] 属性下的 <p-pickList> 组件,它执行内部 *ngFor 为它,我所要做的就是提供一个模板
<ng-template let-foo pTemplate="item">
...
{{ foo.anythingGoesHereWithNoWarningAndNoAutocomplete }}
但是,foo 上的类型信息似乎丢失了。
我是类型安全的忠实拥护者,我喜欢 Intellij(或任何其他编辑器)如果在模板中执行诸如指定 foo 的无效属性之类的操作,可以向我显示警告
如果我有一个普通的*ngFor,它会推断出foo的类型
<div *ngFor="let foo of foos">
{{ foo.autoCompleteWorksInMostIDEsAsWellAsWarningIfInvalidProp }}
问题:
-
是否有任何语法可以让我提示
let-foo的类型? (希望大多数 IDE 都能识别)。 -
如果我不想依赖 IDE,有没有办法让 ng 编译器类型检查
foo(由 let-foo 声明)?
tl;dr 是否有让我键入注释模板输入变量的语法? 例如类似这样的语法?
let-foo="$implicit as Foo" 或 let-foo-type="Foo"?
解决方法
一个愚蠢的想法是在我的组件中有一个标识函数,例如
identity(foo: Foo): Foo {
return foo;
}
但是做
{{ identity(foo).fooProp }}
相对于
来说进步不大{{ (foo as Foo).fooProp }}`
【问题讨论】:
-
不确定
fulltemplatetypecheck选项是否有效? angular.io/guide/aot-compiler#fulltemplatetypecheck -
可能是接收类型参数的管道?像 {{ youwhareverData | typeChecker:FooClass }}
-
这更像是您需要提交给 Angular 团队的功能请求
-
这能回答你的问题吗? ng-template - typed variable
-
即使使用 fullTemplateTypeCheck 和 strictTemplates,如果参数不存在,Prod 构建也无法识别