DEV Community

Cover image for Flow: $FlowFixMe command should be $FlowFixYourself. FlowType is dying!  🧐🤔😱
Shahjada Talukdar for The Destro Dev Show

Posted on

Flow: $FlowFixMe command should be $FlowFixYourself. FlowType is dying! 🧐🤔😱

First, let's talk about what is Flow or FlowType...

From their official site -

FLOW IS A STATIC TYPE CHECKER FOR JAVASCRIPT.

From ReactJS's site-

Flow is a static type checker for your JavaScript code. It is developed at Facebook and is often used with React. It lets you annotate the variables, functions, and React components with a special type syntax, and catch mistakes early.

Seems fair 👌

If you already used Flow, then you know that in a few cases in your code, Flow is not happy though you think your code is fully okay and should not be modified to make Flow happy.
But as Flow is not happy with that code, the build will break. 😱
So, to bypass the Flow error, we have to add $FlowFixMe before that specific line. 😐

And if you are working with a big codebase, then you probably need to add this thing a lot in a lot of places. 😞

Like, if we go to ReactJS GitHub repo and search for $FlowFixMe in the whole repo, we will find a lot of them in the codebase.

Alt Text

I think, that $FlowFixMe should be $FlowFixYourself 😉

Now, let's talk about what Facebook is doing to make Flow better.

Actually, they are even removing Flow from their own projects and migrating their codebase to TypeScript.

One of the popular Facebook tools is JEST.

Alt Text

They used Flow on the Jest codebase. Now they have migrated and started using TypeScript.

Alt Text

So, as Facebook developers are also removing FlowType from their projects, what do you think about it?

Do you wanna use it for your projects or remove it?
Do you think they will make it better?

Cheers!
👋

As I am trying to contribute contents on the Web, you can buy me a coffee for my hours spent on all of these ❤️😊🌸
Buy Me A Coffee

I will provide some reference URLs for you guys to look more-

Facebook's own Flow adoption? #7365

(Apologies if this isn't appropriate usage of the issue tracker, feel free to close if so.)

Jest (another Facebook project) has recently announced they're planning on migrating their codebase from Flow to TypeScript: https://github.com/facebook/jest/pull/7554

Quite surprised to see that decision go through, as I would have expected Facebook to just veto it for the obvious reason of internal cohesion/support between its own projects.

I'm personally more of a fan of Flow's approach of favouring correctness. A lot of my confidence in continuing to use Flow in my projects is that it's backed by Facebook's usage for its own projects (React, RN, Relay, Metro etc). But given that there's seemingly no opposition to a FB project, not even just being started in TS but being actively rewritten off of Flow, it brings this view into question. And of course, the linked issue is now being paraded all over HN, Reddit, etc, raising further FUD against Flow.

Is there any chance someone on the Facebook team could outline the company's long term plan for type system usage? Is Jest somehow an exception, and React/RN/Facebook's own internal codebases etc are firmly committed as Flow projects? Or is Facebook internally beginning to consider migrating away? From what I understand, every change to Flow's codebase has to be approved by someone employed by Facebook, so having an idea of how much attention FB will be directing towards Flow seems fairy crucial to understanding its long term prospects.

And I guess a further question is whether Flow is planning on prioritising the main issues people keep bringing up when discussing reasons to migrate away (support for 3rd party type definitions, stability of the type checker).

To see FlowFixMe search result in ReactJS reop, 👉 Click here

To see HackerNews Thread 👉 Click here

Top comments (1)

Collapse
 
amram profile image
Eric Amram

Fully agree.
$FlowFixMe is the #1 most important feature in Flow, and it has been awfully designed. Which shows that the team does not understand how the developers use it, nor the weaknesses of their tool.
So sad to see a project with such potential be ruined by a single terrible design choice.
Anyway, Typescript is definitely the way to go.