-
-
Notifications
You must be signed in to change notification settings - Fork 190
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve type safety by applying satisfies
operator
#1972
Labels
Comments
As we are going through other work we should be on the lookout for places to replace Type Annotations with satisfies. Typescript guidelines should give indicators for when to use |
There are currently 135 Type Annotations in core. |
@MajorLift will do a bit more investigation and we will revisit as part of next refinement. |
Type annotations count in core as of 3/21/2024 (test files excluded):
|
This was referenced Jun 5, 2024
MajorLift
added a commit
to MetaMask/snaps
that referenced
this issue
Jul 23, 2024
## Motivation As part of its OKRs (Q2 2024 O3KR4, Q3 2024 O2KR4) the Wallet Framework Team has upgraded all core packages to use TypeScript v5.0, and is enabling other packages throughout our codebase to upgrade as well. Unblocking the snaps monorepo is a high priority, as it has close interdependencies with core monorepo. This commit upgrades the TypeScript version used in the snaps monorepo by two major versions: v4.9 and v5.0. - https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/ - https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/ ## Features ### `v4.9` - [`satisfies` operator](https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#the-satisfies-operator) - See MetaMask/core#1972 - [Unlisted property narrowing with `in` operator](https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#in-narrowing) ### `v5.0` - [`const` Type Parameters](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#const-type-parameters): - Causes `as const` inference by default. - 77 `as const` instances in the snaps monorepo. ```ts type HasNames = { names: readonly string[] }; function getNamesExactly<const T extends HasNames>(arg: T): T["names"] { // ^^^^^ return arg.names; } // Inferred type without `const`: string[] // Inferred type with `const`: readonly ["Alice", "Bob", "Eve"] // Note: Didn't need to write 'as const' here const names = getNamesExactly({ names: ["Alice", "Bob", "Eve"] }); ``` - `enum` improvements: - [All `enum`s are union `enum`s](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#all-enums-are-union-enums) - [`enum` overhaul](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#enum-overhaul) - 30 `enum` instances in the snaps monorepo. - Decorators ## Breaking Changes ### `v5.0` - Full list of breaking changes and deprecations: https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#breaking-changes-and-deprecations - Regressions in Snaps repo - [Forbidden Implicit Coercions in Relational Operators](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#forbidden-implicit-coercions-in-relational-operators) - Fixed here: fffe4b2
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The next version bump for TypeScript in
core
andmetamask-module-template
will mark an update to version 4.9, which will make thesatisfies
operator keyword available for use (https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#satisfies).The
satisfies
operator is a safer alternative to type annotations (val: T
) and type assertions (val as T
). We should investigate opportunities to improve type safety in the codebase by applying this feature to existing code.The text was updated successfully, but these errors were encountered: