Skip to content

Commit 09e68db

Browse files
authored
fix: add non-null assertions for non-nullable input bindings (#20136)
Due to a bug in the template type checker, binding expressions that include `undefined` in their type which are bound to directive inputs that don't accept `undefined` would not be reported as an error, if the directive declares at least one coercion member using `ngAcceptInputType`. angular/angular#38273 fixes this bug, which uncovers some template issues. Long-term, it would be best if the directives would be updated to include `undefined` in an input's type as appropriate. This would require a larger effort and is likely to introduce some breaking changes to public API.
1 parent bf953e9 commit 09e68db

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

src/dev-app/datepicker/datepicker-demo.html

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ <h2>Result</h2>
5151
[(ngModel)]="date"
5252
[min]="minDate"
5353
[max]="maxDate"
54-
[matDatepickerFilter]="filterOdd ? dateFilter : undefined"
54+
[matDatepickerFilter]="filterOdd ? dateFilter : undefined!"
5555
[disabled]="inputDisabled"
5656
(dateInput)="onDateInput($event)"
5757
(dateChange)="onDateChange($event)">
@@ -81,7 +81,7 @@ <h2>Result</h2>
8181
[min]="minDate"
8282
[max]="maxDate"
8383
[disabled]="inputDisabled"
84-
[matDatepickerFilter]="filterOdd ? dateFilter : undefined"
84+
[matDatepickerFilter]="filterOdd ? dateFilter : undefined!"
8585
placeholder="Pick a date">
8686
<mat-datepicker-toggle [for]="resultPicker2"></mat-datepicker-toggle>
8787
<mat-datepicker
@@ -99,7 +99,7 @@ <h2>Input disabled datepicker</h2>
9999
<mat-form-field>
100100
<mat-label>Input disabled</mat-label>
101101
<input matInput [matDatepicker]="datePicker1" [(ngModel)]="date" [min]="minDate" [max]="maxDate"
102-
[matDatepickerFilter]="filterOdd ? dateFilter : undefined" disabled>
102+
[matDatepickerFilter]="filterOdd ? dateFilter : undefined!" disabled>
103103
<mat-datepicker #datePicker1 [touchUi]="touch" [startAt]="startAt"
104104
[startView]="yearView ? 'year' : 'month'"></mat-datepicker>
105105
</mat-form-field>
@@ -111,7 +111,7 @@ <h2>Input disabled via FormControl</h2>
111111
<mat-form-field>
112112
<mat-label>FormControl disabled</mat-label>
113113
<input matInput [matDatepicker]="datePicker2" [formControl]="dateCtrl" [min]="minDate"
114-
[max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined">
114+
[max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined!">
115115
<mat-datepicker #datePicker2 [touchUi]="touch" [startAt]="startAt"
116116
[startView]="yearView ? 'year' : 'month'"></mat-datepicker>
117117
</mat-form-field>
@@ -127,7 +127,7 @@ <h2>Input disabled, datepicker popup enabled</h2>
127127
<mat-form-field>
128128
<mat-label>Input disabled, datepicker enabled</mat-label>
129129
<input matInput disabled [matDatepicker]="datePicker3" [(ngModel)]="date" [min]="minDate"
130-
[max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined">
130+
[max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined!">
131131
<mat-datepicker #datePicker3 [touchUi]="touch" [disabled]="false" [startAt]="startAt"
132132
[startView]="yearView ? 'year' : 'month'"></mat-datepicker>
133133
</mat-form-field>
@@ -144,7 +144,7 @@ <h2>Datepicker with value property binding</h2>
144144
This breaks strict template type checking. What should we do here?
145145
-->
146146
<input matInput [matDatepicker]="datePicker4" [value]="date" [min]="minDate"
147-
[max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined">
147+
[max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined!">
148148
<mat-datepicker #datePicker4 [touchUi]="touch" [startAt]="startAt"
149149
[startView]="yearView ? 'year' : 'month'"></mat-datepicker>
150150
</mat-form-field>
@@ -183,7 +183,7 @@ <h2>Range picker</h2>
183183
[disabled]="inputDisabled"
184184
[comparisonStart]="comparisonStart"
185185
[comparisonEnd]="comparisonEnd"
186-
[dateFilter]="filterOdd ? dateFilter : undefined">
186+
[dateFilter]="filterOdd ? dateFilter : undefined!">
187187
<input matStartDate formControlName="start" placeholder="Start date"/>
188188
<input matEndDate formControlName="end" placeholder="End date"/>
189189
</mat-date-range-input>
@@ -207,7 +207,7 @@ <h2>Range picker</h2>
207207
[disabled]="inputDisabled"
208208
[comparisonStart]="comparisonStart"
209209
[comparisonEnd]="comparisonEnd"
210-
[dateFilter]="filterOdd ? dateFilter : undefined">
210+
[dateFilter]="filterOdd ? dateFilter : undefined!">
211211
<input matStartDate formControlName="start" placeholder="Start date"/>
212212
<input matEndDate formControlName="end" placeholder="End date"/>
213213
</mat-date-range-input>
@@ -232,7 +232,7 @@ <h2>Range picker</h2>
232232
[disabled]="inputDisabled"
233233
[comparisonStart]="comparisonStart"
234234
[comparisonEnd]="comparisonEnd"
235-
[dateFilter]="filterOdd ? dateFilter : undefined">
235+
[dateFilter]="filterOdd ? dateFilter : undefined!">
236236
<input matStartDate formControlName="start" placeholder="Start date"/>
237237
<input matEndDate formControlName="end" placeholder="End date"/>
238238
</mat-date-range-input>

src/dev-app/stepper/stepper-demo.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ <h3>Linear Vertical Stepper Demo using a single form</h3>
1010
<form [formGroup]="formGroup">
1111
<mat-vertical-stepper #linearVerticalStepper="matVerticalStepper" formArrayName="formArray"
1212
[linear]="!isNonLinear" [disableRipple]="disableRipple">
13-
<mat-step formGroupName="0" [stepControl]="formArray?.get([0]) === null ? undefined : formArray?.get([0])!">
13+
<mat-step formGroupName="0" [stepControl]="formArray?.get([0]) === null ? undefined! : formArray?.get([0])!">
1414
<ng-template matStepLabel>Fill out your name</ng-template>
1515
<mat-form-field>
1616
<mat-label>First name</mat-label>
@@ -28,7 +28,7 @@ <h3>Linear Vertical Stepper Demo using a single form</h3>
2828
</div>
2929
</mat-step>
3030

31-
<mat-step formGroupName="1" [stepControl]="formArray?.get([1]) === null ? undefined : formArray?.get([1])!"
31+
<mat-step formGroupName="1" [stepControl]="formArray?.get([1]) === null ? undefined! : formArray?.get([1])!"
3232
optional>
3333
<ng-template matStepLabel>
3434
<div>Fill out your email address</div>

src/material/paginator/paginator.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<mat-form-field
99
*ngIf="_displayedPageSizeOptions.length > 1"
10-
[appearance]="_formFieldAppearance"
10+
[appearance]="_formFieldAppearance!"
1111
[color]="color"
1212
class="mat-paginator-page-size-select">
1313
<mat-select

src/material/select/select.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
[cdkConnectedOverlayOrigin]="origin"
2525
[cdkConnectedOverlayOpen]="panelOpen"
2626
[cdkConnectedOverlayPositions]="_positions"
27-
[cdkConnectedOverlayMinWidth]="_triggerRect?.width"
27+
[cdkConnectedOverlayMinWidth]="_triggerRect?.width!"
2828
[cdkConnectedOverlayOffsetY]="_offsetY"
2929
(backdropClick)="close()"
3030
(attach)="_onAttached()"

0 commit comments

Comments
 (0)