Repository: angular
Issue: Input properties cannot be unset when using exactOptionalPropertyTypes
Labels: area: core

### Which @angular/* package(s) are the source of the bug?

core

### Is this a regression?

No

### Description

If the `exactOptionalPropertyTypes` TS config option is set, then it becomes impossible to unset an input property through a binding (or at least not without working around the TS type system).

For example, given the following:

```ts
@Component({
  selector: 'child-component',
})
class ChildComponent {
  @Input() someProperty?: string;
}

@Component({
    template: `<child-component [someProperty]="someValue"></child-component>`,
})
class ParentComponent {
  someValue?: string;
}
```

If the `exactOptionalPropertyTypes` TS config option is set, the above will fail to compile with `error TS2412: Type 'string | undefined' is not assignable to type 'string' with 'exactOptionalPropertyTypes: true'`.

One random example (out of many, I'd presume) where this becomes a real problem is when attempting to clear the `fragment` property of a [`routerLink` directive](https://angular.io/api/router/RouterLink). There is no clean way to do this (that I know of) if `exactOptionalPropertyTypes` is enabled. (Setting the property to the empty string is not equivalent, as that will still result in a spurious `#` character being added to the href.) The below reproducer demonstrates this particular problem.

The only way out of this is to work around the type system by [coercing the value to non-null](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#non-null-assertion-operator-postfix-):

```html
<child-component [someProperty]="someValue!"></child-component>
```

But note that [this is still not quite correct](https://stackoverflow.com/questions/14967535/delete-a-x-vs-a-x-undefined), as it results in the property being set to `undefined`, as opposed to being unset (in the `delete` operator sense) - and in fact this is precisely the mistake `exactOptionalPropertyTypes` is designed to prevent. Fortunately most child components won't care as they typically don't make the distinction between an absent property and one that is set to `undefined`.

### Please provide a link to a minimal reproduction of the bug

https://codesandbox.io/p/sandbox/angular-router-fragment-uo79rv

### Please provide the exception or error you saw

```
Error: src/app/app.component.html:12:23 - error TS2412: Type 'string | undefined' is not assignable to type 'string' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target.
  Type 'undefined' is not assignable to type 'string'.
```


### Please provide the environment you discovered this bug in (run `ng version`)

```
ngular CLI: 15.2.1
Node: 16.17.0
Package Manager: npm 8.15.0
OS: linux x64

Angular: 15.2.1
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                         Version
---------------------------------------------------------
@angular-devkit/architect       0.1502.1
@angular-devkit/build-angular   15.2.1
@angular-devkit/core            15.2.1
@angular-devkit/schematics      15.2.1
@schematics/angular             15.2.1
rxjs                            7.6.0
typescript                      4.8.2
```