Hi,

It's a very big topic and may sound terrifying.

I started this discussion because I'm using TypeScript a lot recently. And
realized a strong typing system really helps a lot when writing the code.
So I'm thinking about if we can refactor our code with TypeScript.

Of course, there will be a lot of work for the whole codebase. So I
suggested separating the process into 4 steps, and hopefully, this can be
done progressively:

1. The easiest part, create a new branch and renaming all the files from
.js to .ts. If everything goes well, we can use TS compiler to compile
these files already.
2. Add typings for our fundamental modules. Like `List`, `Graph`,
`graphic`, `View`, `Model` etc...These modules will be used in almost all
components.
3. We can add typings in our components, which has the most of the logic
code.
4. Adjust our code structure to be more TypeScript.

Personally speaking, the first 3 steps the most needed. It looks to be
easy, but during the process of adding typings. We may need to rewrite a
lot of code to meet the purpose of strong typing.

Here are some pros and cons of changing the code to TypeScript I can think
of:

Pros are mostly come from strong typing:
1. We can avoid bugs like argument mismatching [1], variable naming typo
Bugs like these easily happen when we are refactoring the code. I can find
a lot of commits about fixing the typos [2].
2. Developers know what the interfaces look like of each module, which
makes it easier for them to contribute.
3. VSCode has a really wonderful intelligence on the TypeScript. I enjoy it
a lot when I'm writing TypeScript.

Cons:
1. Honestly speaking, it's a lot of work. And it's hard to keep the
TypeScript branch updated with the master branch before merging.
2. Developers may need to learn TypeScript. But I think it's not a big deal
comparing to learning how echarts works.

At last, as I said first, the word refactoring may sound terrifying. But I
believe it worth it. I hope we can all enjoy writing our code with the help
of excellent intelligence.

Regards

[1] https://github.com/ecomfe/zrender/pull/480
[2] https://github.com/apache/incubator-echarts/search?q=typo&type=Commits

-- 
Yi Shen
Apache ECharts(incubating) PPMC

Reply via email to