有没有办法将类型断言/注释添加到模板输入变量?

Era*_*dan 22 angular angular6

背景

我有一个看起来像这样的模板(我使用的是一个使用它作为重复项的基础的组件,它是p-pickList,但问题并不是特定于该组件,仅作为示例)

对于背景,假设我有一个类型Foo,我的组件有一个foos: Foo[],我将它提供给属性<p-pickList>下的组件,[source]并为它做内部*ngFor,我所要做的就是提供一个模板

 <ng-template let-foo pTemplate="item">
   ...
   {{ foo.anythingGoesHereWithNoWarningAndNoAutocomplete }}
Run Code Online (Sandbox Code Playgroud)

但是,类型信息foo似乎丢失了.

我是类型安全的忠实粉丝,我喜欢Intellij(或任何其他编辑器)可以在模板内部向我显示警告我做了类似指定无效属性的事情 foo

如果我有一个常规*ngFor,它会推断出类型foo

<div *ngFor="let foo of foos">
  {{ foo.autoCompleteWorksInMostIDEsAsWellAsWarningIfInvalidProp }}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是否有任何语法可以让我提示类型let-foo?(希望大多数IDE都能识别).

  2. 如果我不想依赖IDE,有没有办法让ng编译器类型检查foo(由let-foo声明)?

tl; dr是否有一种语法可以让我输入注释模板输入变量?例如这样的东西组成语法?

let-foo="$implicit as Foo"还是let-foo-type="Foo"?

解决方法

一个愚蠢的想法是在我的组件中有一个身份功能,例如

identity(foo: Foo): Foo {
  return foo;
}
Run Code Online (Sandbox Code Playgroud)

但是做

{{ identity(foo).fooProp }}

不是一个很大的进步

{{ (foo as Foo).fooProp }}

ham*_*ima -2

VSCode 应该具有开箱即用的功能,刚刚在 stackblitz 中进行了测试:https://stackblitz.com/edit/angular-type-assertion ?file=src/app/app.component.html

在此输入图像描述

  • Stackblitz 使用 [Angular 语言服务](https://angular.io/guide/language-service) (3认同)
  • 您没有检查代码中的模板输入变量。在这里更新了您的 Stackblitz:https://stackblitz.com/edit/angular-type-assertion-wndgva?file=src/app/app.component.html 检查类型信息是否在 `ng-template` `let- 中丢失富` (3认同)
  • @hamilton.lima这个问题是关于模板输入变量的类型断言/注释。即使在 Stackblitz 上,模板输入变量中对对象类型的引用也会丢失。 (2认同)