Optional
デコレータの型につい て
#8
Answered
by
lacolaco
ver-1000000
asked this question in
Questions
-
ControlValueAccessorなコンポーネントで、次のようにすると、自身がNgFormに登録されている場合(Form要素が親要素になっている場合)はコンポーネント内からNgControlが取得できます。 constructor(@Optional() @Self() private ngControl: NgControl) このとき、自身がNgFormに登録されていない場合、 これ、型解決時にはなにも警告を提示してくれないので、 constructor(@Optional() @Self() private ngControl: NgControl | null) |
Beta Was this translation helpful? Give feedback.
Answered by
lacolaco
Dec 26, 2022
Replies: 1 comment 1 reply
-
まずひとつの方法は、 constructor(@Optional() @Self() @Inject(NgControl) private ngControl: NgControl | null) もうひとつの方法(こっちがおすすめ)は、Angular v14から追加された class Foo {
private ngControl = inject(NgControl, { optional: true, self: true }); // 自動的に NgControl | null になる
} |
Beta Was this translation helpful? Give feedback.
1 reply
Answer selected by
ver-1000000
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
まずひとつの方法は、
@Inject()
を使う方法ですね。引数の型アノテーションとインジェクショントークンを分けることで| null
の指定ができるようになります。もうひとつの方法(こっちがおすすめ)は、Angular v14から追加された
inject()
関数を使う方法です。こちらはoptional
フラグをオンにすれば自動的に| null
として推論されます。https://angular.jp/api/core/inject