https://github.com/ant-design/ant-design/commit/9a0d751f94a19c5b20f01165d0d47fb1ee53687b This is a commit of Ant Design refactoring their code with TypeScript. I think it will be a good reference.
On Wed, Oct 30, 2019 at 7:58 PM Yi Shen <shenyi....@gmail.com> wrote: > First of all, I want to make my point more clear: > It's not changing from one language to another. The key is bringing strong > typing system into current JavaScript code. That's what TypeScript designed > for. > > Otherwise it probably >> reduces the willing of contribution. Thus a simple language might be >> better, suppose they do not know them well. > > > Only if our developers say so. About this point. I want to quote what > author of vue says in his article about rewriting vue with TypeScript [1] > "The codebase is also now written in TypeScript. Although this will make > proficiency in TypeScript a pre-requisite for contributing to the new > codebase, we believe the type information and IDE support will actually > make it easier for a new contributor to make meaningful contributions." > > Now we have the code standard [3] code checking based on JavaScript, which >> is the guide when adding or modifying code. If part JS part TS, how to >> guide >> the contributors? > > > It will be merged to master only when all the codebase are written in > TypeScript. > > If a language feature is reliable (the spec endorse them) and benefit >> echarts a lot, we might use them. >> If it is not enough, we can wait. Do not need to be in hurry. > > > I think TypeScript has shown its relibility since it has been working well > in a bunch of large project, like Angular, for a very long time. > > >> Program language does not determines how good a program is. >> The program design, the understanding of requirements, the testing work >> does > > > A good language help us write a good program. It reduces the possiblity of > having bug in collaboration. Especially when wen need to grow our community. > And the design of code are heavlily based on the feature of programming > language. > > > [1] > https://medium.com/the-vue-point/plans-for-the-next-iteration-of-vue-js-777ffea6fabf > > On Tue, Oct 29, 2019 at 11:50 PM SHUANG SU <sushuang0...@gmail.com> wrote: > >> I am afraid I do not agree with it. >> I like TypeScript too, but do not support to refactor echarts to >> TypeScript, >> at least do not support to start the refactor work now, >> until some more strong and reasonable arguments or points appear. >> Basically, I think it brings little benefits but has some downsides and >> brings heavy cost of a big surgery. >> >> >> *[About the bugs and issues]:* >> >> The bug [1] can be find by TypeScript. But bugs like [1] are very rare >> since echarts be born. >> And even if TypeScript can make sure the type checking for interfaces, it >> still can not ensures the content >> of the parameters is correct. Essentially, test cases and regression >> testing is what we need to cover this >> cases. If test cases cover them, this kind of bug can be found, no matter >> JavaScript or TypeScript is used. >> Testing work is annoying but worth to take the time, comparing with the >> heavy workload of refactoring to TS. >> >> Most of the typo issues in [2] are either: >> - Typo in comments, which are nothing to do with the programming language >> selection. >> - Spelling problems but the logic of the code is correct, where TypeScript >> does not help. >> - Spelling problems and cause buggy code, which can be found by code >> checking tools like ESLint. >> TypeScript is not necessarily needed. >> >> In the experience of maintaining echarts, most of the issues or bugs (in >> GitHub) are about the logic itself or >> about understanding of the user requirements or about program design. >> Changing to TypeScript can not resolve these issues. >> TypeScript can help to find some of grammar and coding problem when >> programing, but very little. >> And in most cases the code checking tools is enough for JS dev in echarts. >> I think we should better write more test cases to cover the features >> rather >> than considering change a >> programing language to improve the quality. >> >> >> *[About the developers]:* >> >> The user of echarts contains not only the well-trained "front-end >> developers", but also >> lots of developers from various technical background. echarts is just one >> of the libraries in their system or in their big work. >> If they meet some problem, some of them need to check the code to debug, >> some of them need to modify the code to >> fix some defects. And then they might wish to contribute them to echarts. >> I >> think we should not bring more burden in language >> learning or make them hesitate about the detail of the language features. >> Otherwise it probably >> reduces the willing of contribution. Thus a simple language might be >> better, suppose they do not know them well. >> Yes a programmer who have the basic knowledge of Object-orient programming >> may understand the code what ever the >> code write in JS or TS (in echarts case), but they probably have different >> willing to modify the code and feed back to echarts if they >> have to take lots of time to learn a language. In addition, JavaScript has >> been developing for twenty years and might be >> a little more worth of the time to learn it for a non-front-end developer. >> >> >> *[About the steps]:* >> >> > 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. >> >> I am afraid I think the progressive way is not practical. The reason is: >> we can not prove it do bring benefits to echarts if just making little >> changes, >> but bring the code to a mass state in a long duration. >> Now we have the code standard [3] code checking based on JavaScript, which >> is the guide when adding or modifying code. If part JS part TS, how to >> guide >> the contributors? >> If we think that some work can be handled in future, if it is not urgency, >> it will probably not be handled for long time, where the code will keep >> part JS part TS style. >> Things change fast. >> >> >> *[About the goal]:* >> The goal of echarts is to build a good data visualization lib. I think we >> should keep focusing on that. >> >> Change a language is a huge work. If making a thorough change, it will >> bring lots of bugs. If >> only changing a little, not worth to do that. So we need to think of them >> carefully. >> If a language feature is reliable (the spec endorse them) and benefit >> echarts a lot, we might use them. >> If it is not enough, we can wait. Do not need to be in hurry. >> Program language does not determines how good a program is. >> The program design, the understanding of requirements, the testing work >> does. >> >> Now that there are so many issues and features need to be handled or >> fixed, >> I do not think changing a language >> is an important thing at the current stage. We have been using JS for more >> than four years in echarts. >> I still can not convince me that if we change the language with a great >> cost, what it really resolves? >> Is it really need to change a language to resolve them? >> >> >> [1] https://github.com/ecomfe/zrender/pull/480 >> [2] >> https://github.com/apache/incubator-echarts/search?q=typo&type=Commits >> [3] https://echarts.apache.org/en/coding-standard.html >> >> >> Thanks, >> ------------------------------ >> Su Shuang (100pah) >> ------------------------------ >> >> >> >> On Tue, 29 Oct 2019 at 15:08, Yi Shen <shenyi....@gmail.com> wrote: >> >> > 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 >> > >> > > > -- > Yi Shen > Apache ECharts(incubating) PPMC > -- Yi Shen Apache ECharts(incubating) PPMC