From a StackShare community member: \"We are looking to rewrite our outdated front-end with TypeScript. Right now we have a mix of CoffeeScript and vanilla JavaScript. I have read that adopting TypeScript can help enforce better code quality, and best practices. I also heard good things about Flow (JS). Which one would you recommend and why?\"","private":false,"viewCount":393504,"publishedAt":"2019-08-13T00:50:00Z","upvotesCount":7,"decisionType":"getAdvice","fromTools":[],"toTools":[],"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231774098455524","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777202346982","typename":"Tool"}],"services":[{"type":"id","generated":false,"id":"Tool:101231774098455524","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773926852560","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773939333405","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777202346982","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"Tool:101231777202346982":{"id":"101231777202346982","name":"Flow (JS)","slug":"flow--js-","title":"Flow is a static type checker for Javascript (by Facebook)","verified":false,"imageUrl":"https://img.stackshare.io/service/7550/7mfszmjJ_400x400.jpg","canonicalUrl":"/flow--js-","path":"/flow--js-","votes":0,"fans":124,"stacks":152,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/7550/thumb_7mfszmjJ_400x400.jpg"},"Tool:101231773926852560":{"name":"CoffeeScript","path":"/coffeescript","id":"101231773926852560","imageUrl":"https://img.stackshare.io/service/1178/slQydAMv.png","thumbUrl":"https://img.stackshare.io/service/1178/thumb_slQydAMv.png","stacks":3366,"fans":1757,"votes":1025,"followingTool":false,"__typename":"Tool"},"$Tool:101231774098455524.stackDecisions({\"first\":6}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:102606927168270555","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:102614213604584749":{"id":"102614213604584749","username":"objmj-itminds","title":"Senior Software Developer","companyName":"IT Minds","imageUrl":"https://img.stackshare.io/user/304074/default_f97d1d290c2b700f483db9cf3422c7c0ef1ac0ed.png","thumbUrl":"https://img.stackshare.io/user/304074/thumb_f97d1d290c2b700f483db9cf3422c7c0ef1ac0ed.png","displayName":"Martin Johannesson","__typename":"User"},"StackDecision:102614413651968242":{"user":{"type":"id","generated":false,"id":"User:102614213604584749","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:102614413651968242.company","typename":"Company"},"link":{"type":"id","generated":true,"id":"$StackDecision:102614413651968242.link","typename":"Link"},"publicId":"102614413651968242","id":"102614413651968242","htmlContent":"

At IT Minds we create customized internal or #B2B web and mobile apps.\nI have a go to stack that I pitch to our customers consisting of 3 core areas.\n1) A data core #backend .\n2) A micro #serverless #backend.\n3) A user client #frontend.\n\n

For the Data Core I create a backend using TypeScript Node.js and with TypeORM connecting to a PostgreSQL \nExposing an action based api with Apollo GraphQL \n\n

For the micro serverless backend, which purpose is verification for authentication, autorization, logins and the likes.\nIt is created with Next.js api pages. Using MongoDB to store essential information, caching etc.\n\n

Finally the frontend is built with React using Next.js , TypeScript and @Apollo.\nWe create the frontend as a PWA and have a AMP landing page by default.","private":false,"viewCount":2920645,"publishedAt":"2019-08-14T08:34:49Z","upvotesCount":14,"decisionType":"freeform","fromTools":[],"toTools":[],"subjectTools":[],"services":[{"type":"id","generated":false,"id":"Tool:101231774098455524","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773845103618","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777149555129","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773853533403","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776161934711","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775212866992","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776411419473","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854388643","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773849098825","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776785845663","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776433245869","typename":"Tool"}],"topics":[{"type":"id","generated":false,"id":"Topic:101777457607861763","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988901054690","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988860833239","typename":"Topic"}],"__typename":"StackDecision"},"$StackDecision:102614413651968242.company":{"imageUrl":"https://img.stackshare.io/company/23579/default_d00d0589d3279df1ba5453ba947c5a1315bded9b.png","thumbUrl":"https://img.stackshare.io/company/23579/thumb_d00d0589d3279df1ba5453ba947c5a1315bded9b.png","name":"IT Minds","path":"/companies/it-minds","features":[],"__typename":"Company"},"$StackDecision:102614413651968242.link":{"url":"https://dev.to/itminds/the-leading-web-stack-of-an-it-minds-senior-developer-45mb","title":"The Leading Web stack of an IT Minds Senior Developer. - DEV Community 👩‍💻👨‍💻","__typename":"Link"},"Tool:101231777149555129":{"name":"TypeORM","path":"/typeorm","id":"101231777149555129","imageUrl":"https://img.stackshare.io/service/7419/20165699.png","thumbUrl":"https://img.stackshare.io/service/7419/thumb_20165699.png","stacks":602,"fans":1088,"votes":81,"followingTool":false,"__typename":"Tool"},"Tool:101231773853533403":{"name":"PostgreSQL","path":"/postgresql","id":"101231773853533403","imageUrl":"https://img.stackshare.io/service/1028/ASOhU5xJ.png","thumbUrl":"https://img.stackshare.io/service/1028/thumb_ASOhU5xJ.png","stacks":98975,"fans":96102,"votes":3550,"followingTool":false,"__typename":"Tool","slug":"postgresql","title":"A powerful, open source object-relational database system","verified":false,"canonicalUrl":"/postgresql","following":false,"followContext":null},"Tool:101231776161934711":{"name":"Apollo","path":"/apollo","id":"101231776161934711","imageUrl":"https://img.stackshare.io/service/5508/CyUH653y.png","thumbUrl":"https://img.stackshare.io/service/5508/thumb_CyUH653y.png","stacks":2426,"fans":2451,"votes":25,"followingTool":false,"__typename":"Tool","slug":"apollo","title":"GraphQL server for Express, Connect, Hapi, Koa and more","verified":false,"canonicalUrl":"/apollo","following":false,"followContext":null},"Tool:101231776785845663":{"name":"PWA","path":"/pwa","id":"101231776785845663","imageUrl":"https://img.stackshare.io/service/6658/PSpUS-Hp_400x400.jpg","thumbUrl":"https://img.stackshare.io/service/6658/thumb_PSpUS-Hp_400x400.jpg","stacks":35,"fans":24,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101231776433245869":{"name":"AMP","path":"/amp","id":"101231776433245869","imageUrl":"https://img.stackshare.io/service/6006/amp.jpg","thumbUrl":"https://img.stackshare.io/service/6006/thumb_amp.jpg","stacks":100,"fans":117,"votes":0,"followingTool":false,"__typename":"Tool"},"Topic:101777457607861763":{"name":"B2B","id":"101777457607861763","__typename":"Topic"},"Topic:101231988901054690":{"name":"Backend","id":"101231988901054690","__typename":"Topic"},"Topic:101231988860833239":{"name":"Serverless","id":"101231988860833239","__typename":"Topic"},"$Tool:101231774098455524.stackDecisions({\"first\":6}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:102614413651968242","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:102610657561224490":{"id":"102610657561224490","username":"sa-adebayo","title":"Engineering Manager","companyName":"Andela","imageUrl":"https://img.stackshare.io/user/304003/default_96cf47cbae75b61622f91732af2307b3a2726629.png","thumbUrl":"https://img.stackshare.io/user/304003/thumb_96cf47cbae75b61622f91732af2307b3a2726629.png","displayName":"Adebayo Akinlaja","__typename":"User"},"StackDecision:102967818020186826":{"user":{"type":"id","generated":false,"id":"User:102610657561224490","typename":"User"},"company":null,"link":null,"publicId":"102967818020186826","id":"102967818020186826","htmlContent":"

I picked up an idea to develop and it was no brainer I had to go with React for the frontend. I was faced with challenges when it came to what component framework to use. I had worked extensively with Material-UI but I needed something different that would offer me wider range of well customized components (I became pretty slow at styling). I brought in Evergreen after several sampling and reads online but again, after several prototype development against Evergreen—since I was using TypeScript and I had to import custom Type, it felt exhaustive. After I validated Evergreen with the designs of the idea I was developing, I also noticed I might have to do a lot of styling. I later stumbled on Material Kit, the one specifically made for React . It was promising with beautifully crafted components, most of which fits into the designs pages I had on ground.\n\n

A major problem of Material Kit for me is it isn't written in TypeScript and there isn't any plans to support its TypeScript version. I rolled up my sleeve and started converting their components to TypeScript and if you'll ask me, I am still on it.\n\n

In summary, I used the Create React App with TypeScript support and I am spending some time converting Material Kit to TypeScript before I start developing against it. All of these components are going to be hosted on Bit.\n\n

If you feel I am crazy or I have gotten something wrong, I'll be willing to listen to your opinion. Also, if you want to have a share of whatever TypeScript version of Material Kit I end up coming up with, let me know.","private":false,"viewCount":3456823,"publishedAt":"2019-10-15T18:30:15Z","upvotesCount":30,"decisionType":"freeform","fromTools":[],"toTools":[],"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231775648895157","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773849098825","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774213355431","typename":"Tool"}],"services":[{"type":"id","generated":false,"id":"Tool:101231773849098825","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774213355431","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231778083246999","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774098455524","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776136306750","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776176987604","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775648895157","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"Tool:101231775648895157":{"id":"101231775648895157","name":"Bit","slug":"bit","title":"An open source tool for code sharing","verified":false,"imageUrl":"https://img.stackshare.io/service/4616/QP1hRAU5_400x400.jpg","canonicalUrl":"/bit","path":"/bit","votes":0,"fans":152,"stacks":41,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/4616/thumb_QP1hRAU5_400x400.jpg"},"Tool:101231774213355431":{"id":"101231774213355431","name":"Material-UI","slug":"material-ui","title":"Material UI is a library of React UI components that implements Google's Material Design.","verified":true,"imageUrl":"https://img.stackshare.io/service/1904/default_44d81cb9fadbc3688b7e91a6d5217d0ea5358b57.png","canonicalUrl":"/material-ui","path":"/material-ui","votes":445,"fans":4550,"stacks":2264,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/1904/thumb_44d81cb9fadbc3688b7e91a6d5217d0ea5358b57.png"},"Tool:101231778083246999":{"name":"Evergreen","path":"/evergreen","id":"101231778083246999","imageUrl":"https://img.stackshare.io/service/9302/819518.png","thumbUrl":"https://img.stackshare.io/service/9302/thumb_819518.png","stacks":12,"fans":39,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101231776136306750":{"name":"Material Kit","path":"/material-kit","id":"101231776136306750","imageUrl":"https://img.stackshare.io/no-img-open-source.png","thumbUrl":"https://img.stackshare.io/service/5470/thumb_no-img-open-source.png","stacks":28,"fans":96,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101231776176987604":{"name":"Create React App","path":"/create-react-app","id":"101231776176987604","imageUrl":"https://img.stackshare.io/service/5537/oi64YzXY.jpg","thumbUrl":"https://img.stackshare.io/service/5537/thumb_oi64YzXY.jpg","stacks":1038,"fans":1298,"votes":4,"followingTool":false,"__typename":"Tool"},"$Tool:101231774098455524.stackDecisions({\"first\":6}).edges.2":{"node":{"type":"id","generated":false,"id":"StackDecision:102967818020186826","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:104042388677869390":{"id":"104042388677869390","username":"zimoony","title":"Senior Fullstack Developer","companyName":"QUANTUSflow Software GmbH","imageUrl":"https://img.stackshare.io/user/535402/default_002baf8a5098e7badd949774288e37e836a64e0f.jpeg","thumbUrl":"https://img.stackshare.io/user/535402/thumb_002baf8a5098e7badd949774288e37e836a64e0f.jpeg","displayName":"Simon Reymann","__typename":"User"},"StackDecision:104043743959612403":{"user":{"type":"id","generated":false,"id":"User:104042388677869390","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:104043743959612403.company","typename":"Company"},"link":null,"publicId":"104043743959612403","id":"104043743959612403","htmlContent":"

Here are our 3 main claims why TypeScript is the way to go.\n\n