ionic-team / ionic-team/ionic-framework

feat: improve Typescript support for `exactOptionalPropertyTypes`

Ouverte
#30,005 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
type: feature request
Langage dominant
TypeScript
Étoiles
52.7k
Forks
13.3k
Merge moyen
1 j 15 h
PR mergées (30 j)
51

Description

### Prerequisites

- [X] I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
- [X] I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
- [X] I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already include this feature request, without success.

### Describe the Feature Request

[`exactOptionalPropertyTypes`](https://www.typescriptlang.org/tsconfig/#exactOptionalPropertyTypes) makes TypeScript truly enforce the definition provided matches the actual javascript value.

It's a recently added feature (v4.4) that is increasing in use.

However, many of Ionic's types are incompatible with `exactOptionalPropertyTypes`. This is because they define types as this:

```ts
"shape"?: 'round';
```

and not this:

```ts
"shape"?: 'round' | undefined;
```

It is worth noting that core React types follow the latter convention. Example:

image

### Describe the Use Case

See above.

### Describe Preferred Solution

Unless there is a specific reason, all Ionic attributes with `?` also list `undefined` as an explicit accepted value.

### Describe Alternatives

Not using `exactOptionalPropertyTypes` will opt the user out of many benefits, but it is a workaround for now.

### Related Code

_No response_

### Additional Information

This could also be considered a bug for certain attributes, since certain types, like [`className` defined here](https://github.com/ionic-team/ionic-framework/blob/4bffe976d937e21c42649d010ce696b19962f6ef/packages/react/src/components/react-component-lib/interfaces.ts#L8) don't actually conform with the React `className` attribute:

image

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.