refactor(v2): migrate to Typescript ❄️🌀🐋 #1490
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Background
Docusaurus currently doesn't have any static typing and this has been a painful point for us the maintainers of this repo. In order to move faster and confidently in the future, we have decided to add static typing to our codebase, in particular for Docusaurus 2 codebase while it is still not mature yet.
We, the Docusaurus core team have privately discussed on whch static typing to choose initially and we came to decide between Flow, ReasonML and Typescript.
Initially we decided to go with Flow (because me and Yangshun is familiar with it) but after trying it, we decided to drop it. The library definition is much less than Typescript and the community is smaller too. It makes much more sense to use TS rather than Flow if what we want is just an addition to JavaScript.
We are also very influenced by other popular OSS project move to TS (Example: jestjs/jest#7554)
However, we also decided to try ReasonML because it has a rock solid type system and it looks very promising. At first, we are quite happy with it but we realize that the learning curve is too steep and the community is even smaller. It's a very risky move to use ReasonML and that will make our external contributors even less. Nobody is working on Docusaurus full-time, so to keep the project alive, we'll have to rely on contributors.
So, we decided to go with Typescript. We believe the complexity of adding static typing is worth it in the long-term. We can write codes more confidently (looking at you, JavaScript :)) and it will be easier for new contributors to understand the codebase.
Changes
So, this PR is the very beginning move of Docusaurus to Typescript. Starting with
@docusaurus/utils
I think this is a good start. Will be adding more in the future
Extra changes:
yarn start
andyarn build
command at root to make it easier to start website without having to go to website directory (cd website
)Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan