ionic-team / ionic-team/ionic-framework

feat: improve Typescript support for `exactOptionalPropertyTypes`

Abierto
#30,005 0 comentarios 0 reacciones 0 asignados Ver en GitHub
type: feature request
Lenguaje dominante
TypeScript
Estrellas
52.7k
Forks
13.3k
Merge medio
1 d 15 h
PR fusionados (30 d)
51

Descripción

### 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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.