Angularテンプレートでタイプナローイングを行うことはできますか?

コーダー

ビジネスオブジェクトを入力として受け取るコンポーネントがあります。このコンポーネントのテンプレートでは、ビジネスオブジェクトの一部のサブクラスにのみ存在するプロパティの値を確認することにより、条件付きで一部のコンテンツをレンダリングしたいと思います。

export class Thing { public foo: string; }
export class SubThing extends Thing { public bar: number; }

// ...
export class MyComponent {
  @Input() thing: Thing;
}

<!-- template file -->
{{ thing.foo }}
<div *ngIf="thing?.bar > 10">Conditional content...</div>

コンパイラはテンプレートの型チェックについてそれほど厳密ではなかったため、これは以前は記述どおりに機能していました。最近、これはAOTコンパイラで壊れ始めました(正確にはいつかはわかりません)。厳密に言えば、thing?.barコンパイラthingが単なる、Thingであると判断した場合は無効であり、それがであるとは断言できませんSubThing

のようなことを言いたいのです*ngIf="thing instanceof SubThing && thing?.bar > 10"instanceof、テンプレート自体では使用できませんthingコンパイラが文句を言うのをやめるように、テンプレートからタイプをチェックできる他の方法はありますか?(入力をとして指定することでビルドが再び機能するanyようになりましたが、もちろん、可能であれば型チェックを元に戻したいと思います。)

コーダー

どうやらコンパイラはユーザー定義型ガードを尊重しているようです。コンポーネントでメソッドを定義する必要があります。

export class MyComponent {
  // ...
  /** @internal */ isSubThing(t: Thing): t is SubThing {
    return t instanceof SubThing;
  }
}

<!-- template file -->
{{ thing.foo }}
<div *ngIf="isSubThing(thing) && thing?.bar > 10">
  Conditional content...
</div>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JSONデプロイメントテンプレートの外部でARMテンプレート関数を呼び出すことはできますか?

分類Dev

XAMLコードへのC#テンプレートの追加。どうすればバインディングを行うことができますか?

分類Dev

「テンプレート関数ポインタ」の型を定義することはできますか?

分類Dev

サイレントリリースまたは無人リリースのアップグレードを行うことはできますか?

分類Dev

アップグレード後:このエンベロープシステムトレイアイコンとは何ですか?どうすればそれを取り除くことができますか?

分類Dev

アップグレード後:このエンベロープシステムトレイアイコンとは何ですか?どうすればそれを取り除くことができますか?

分類Dev

Haskellのタイプレベルでパターンマッチングを行うことはできますか?

分類Dev

タイプではないテンプレートパラメータを「void *」タイプにすることはできますか?

分類Dev

非型参照パラメーターは実行時に変更できますが、テンプレートを実行時にインスタンス化できるということですか?

分類Dev

C ++のテンプレートクラスでこれを行うことはできますか

分類Dev

イテレータでこれを行うことはできますか?

分類Dev

クラスタイプ情報マクロをテンプレートに置き換えることはできますか?

分類Dev

Goでテンプレートを実行した後、新しいURLでページをリダイレクトすることはできますか?

分類Dev

トレーニング中にテンソルフローオプティマイザーでlearning_rateを変更することはできません

分類Dev

このコーディングを使用してSDカードから曲をフェッチすることはできません。この方法で行うことはできますか、それともコンテンツプロバイダーで行う必要があります。

分類Dev

ログインページをスキップしてXamarinUIテストを実行することはできますか?

分類Dev

SendGridテンプレートに置換タグ付きの画像を含めることはできますか?

分類Dev

「奇妙な」ROPガジェットを通常のDLLでどのように見つけることができますか?コンパイラはこれを決して行いません。(リターン指向プログラミング)

分類Dev

小枝、子テンプレートから親テンプレートのタグ属性をオーバーライドすることは可能ですか?

分類Dev

プログラムインスタンスを実行するXディスプレイを選択することはできますか?

分類Dev

アンドロイドStudioでデバッグ中に私は、以前のブレークポイントに戻ってステップすることはできますか?(フレームをドロップします)

分類Dev

Androidプロジェクトテンプレートを使用するときにナビゲーションドロワーのテキストスタイルを変更するにはどうすればよいですか?

分類Dev

これはワンライナーで行うことができますか?

分類Dev

魚の殻はifステートメントでワイルドカードグロブを行うことができますか?

分類Dev

タイプが特定のテンプレートパラメータでインスタンス化されているかどうかを確認することはできますか?

分類Dev

グーグルアンドロイドアプリのようにカスタムプログレスバーをどこで入手できますか?

分類Dev

Angularプロパティバインディングターゲットはコンポーネントプロパティを変更できます

分類Dev

C ++-演算子のオーバーロードを使用してconstテンプレートタイプとnon-constテンプレートタイプを比較することはできません

分類Dev

IndexedDB アップグレード イベントを中止することはできますか?

Related 関連記事

  1. 1

    JSONデプロイメントテンプレートの外部でARMテンプレート関数を呼び出すことはできますか?

  2. 2

    XAMLコードへのC#テンプレートの追加。どうすればバインディングを行うことができますか?

  3. 3

    「テンプレート関数ポインタ」の型を定義することはできますか?

  4. 4

    サイレントリリースまたは無人リリースのアップグレードを行うことはできますか?

  5. 5

    アップグレード後:このエンベロープシステムトレイアイコンとは何ですか?どうすればそれを取り除くことができますか?

  6. 6

    アップグレード後:このエンベロープシステムトレイアイコンとは何ですか?どうすればそれを取り除くことができますか?

  7. 7

    Haskellのタイプレベルでパターンマッチングを行うことはできますか?

  8. 8

    タイプではないテンプレートパラメータを「void *」タイプにすることはできますか?

  9. 9

    非型参照パラメーターは実行時に変更できますが、テンプレートを実行時にインスタンス化できるということですか?

  10. 10

    C ++のテンプレートクラスでこれを行うことはできますか

  11. 11

    イテレータでこれを行うことはできますか?

  12. 12

    クラスタイプ情報マクロをテンプレートに置き換えることはできますか?

  13. 13

    Goでテンプレートを実行した後、新しいURLでページをリダイレクトすることはできますか?

  14. 14

    トレーニング中にテンソルフローオプティマイザーでlearning_rateを変更することはできません

  15. 15

    このコーディングを使用してSDカードから曲をフェッチすることはできません。この方法で行うことはできますか、それともコンテンツプロバイダーで行う必要があります。

  16. 16

    ログインページをスキップしてXamarinUIテストを実行することはできますか?

  17. 17

    SendGridテンプレートに置換タグ付きの画像を含めることはできますか?

  18. 18

    「奇妙な」ROPガジェットを通常のDLLでどのように見つけることができますか?コンパイラはこれを決して行いません。(リターン指向プログラミング)

  19. 19

    小枝、子テンプレートから親テンプレートのタグ属性をオーバーライドすることは可能ですか?

  20. 20

    プログラムインスタンスを実行するXディスプレイを選択することはできますか?

  21. 21

    アンドロイドStudioでデバッグ中に私は、以前のブレークポイントに戻ってステップすることはできますか?(フレームをドロップします)

  22. 22

    Androidプロジェクトテンプレートを使用するときにナビゲーションドロワーのテキストスタイルを変更するにはどうすればよいですか?

  23. 23

    これはワンライナーで行うことができますか?

  24. 24

    魚の殻はifステートメントでワイルドカードグロブを行うことができますか?

  25. 25

    タイプが特定のテンプレートパラメータでインスタンス化されているかどうかを確認することはできますか?

  26. 26

    グーグルアンドロイドアプリのようにカスタムプログレスバーをどこで入手できますか?

  27. 27

    Angularプロパティバインディングターゲットはコンポーネントプロパティを変更できます

  28. 28

    C ++-演算子のオーバーロードを使用してconstテンプレートタイプとnon-constテンプレートタイプを比較することはできません

  29. 29

    IndexedDB アップグレード イベントを中止することはできますか?

ホットタグ

アーカイブ