One of the really nice things about Dart in addition to the fact that it’s an AOT compiled language with truly excellent tooling and documentation is the fact that because it’s not a superset of JS it can skip a lot of the messy parts while keeping the best bits.
One good example I like to point to is the idea of mixins.
Take a look at how Dart does it here: https://dart.dev/language/mixins
Then take a look at TypeScript here: https://www.typescriptlang.org/docs/handbook/mixins.html
You might also be interested in this https://dart.dev/resources/coming-from/js-to-dart