ionic-team / ionic-team/ionic-framework
feat: improve Typescript support for `exactOptionalPropertyTypes`
- Ngôn ngữ chính
- TypeScript
- Star
- 52.7k
- Fork
- 13.3k
- Merge trung bình
- 1 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 51
Mô tả
### 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:
### 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:
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.