Draft:Flow (type checker)

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Dukese805 (talk | contribs) at 14:03, 14 February 2024 (Submitting using AfC-submit-wizard). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Flow
File:Flow Logo.png
ParadigmMulti-paradigm: functional, generic, imperative, object-oriented
FamilyJavaScript
Designed byMeta Platforms
DeveloperMeta Platforms
Preview release
v0.226.0
Typing disciplineStructural, nominal
Implementation languageOCaml[1][2]
LicenseMIT License
File formats.flow
Websiteflow.org
Influenced by
JavaScript

Flow is a popular, open-source type-checker for Javascript code which is built and maintained by Meta Platforms.[3][2][4][5] It is used as an alternative for TypeScript and offers stricter analysis, but has a smaller ecosystem.[6] For a while, React recommended Flow as the static type checker to use with JSX, although React no longer provides guidance regarding type-checking following the recent redesign of their website.[7] According to statistics provided by GitHub's dependency graph, Flow is depended on by over 170 thousand different repositories hosted on GitHub alone.[8] In comparison, TypeScript is used in over 15 million repositories.[9]

Features

It supports writing types for libraries in the .flow format, which is somewhat similar to the .d.ts format; however it uses Flow types rather than TypeScript types, which leads to some differences.[10] In addition, it supports checking the types of objects using exact object types, [11] which has been the default in Flow since v0.202.[12] One of TypeScript's major pain points is its lack of support of exact object types.

One of the major benefits of Flow is that it forces the use of explicit type annotations on a module level, which prevents mistakes when deciding SemVer bumps. Additionally, while it is slower,[13][14][15] it is considerably more complete.

History

  • Flow was first announced in 2014, and open-sourced at that time.[3]
  • In February 2015, Flow introduced typecasting and added support for defining types meant to be used outside the current module.[16][17] In comparison, TypeScript added support for import type declarations in early 2020.[18]
  • Later in February 2015, Flow introduced Flow comments, which allows writing type annotations as comments rather than as a syntax extension.[19] They are now one of the most common usages of Flow; in comparison, TypeScript is far more commonly used with its syntax extension.
  • In 2016, Flow added support for Windows.[20]
  • In 2020, a major rework of Flow's architecture was completed, offering up to 6 times faster type-checking.[21][22]
  • In 2021, Facebook announced that Flow would, going forward, be prioritizing internal users of Flow at Facebook, although it would remain open-source.[22][23]
  • In 2023, Flow announced that it had completed the transition to switch Exact Object Types on by default.[12]

References

  1. ^ "facebook/flow: Adds static typing to JavaScript to improve developer productivity and code quality". Retrieved 17 January 2023.
  2. ^ a b "Flow - JavaScript Static Type Checker". 26 August 2021. Retrieved 18 January 2024.
  3. ^ a b Chaudhuri, Avik; Hosmer, Basil; Levi, Gabriel (18 November 2014). "Flow, a new static type checker for JavaScript". Engineering at Meta. Retrieved 17 January 2023.
  4. ^ Jackson, Joab. "Facebook's Flow could help JavaScript programmers spot elusive bugs". CIO New Zealand. Retrieved 2024-02-14.
  5. ^ "ELI5: Flow - Static Type Checker for JavaScript". developers.facebook.com. Retrieved 2024-02-14.
  6. ^ John, Kapantzakis. "Flow vs TypeScript: Which Is Better Suited For Your Next Project? | Scalable Path". Scalable Path. Retrieved 2024-02-14.
  7. ^ "Static Type Checking". Retrieved 18 January 2023.
  8. ^ "Network Dependents • facebook/flow".
  9. ^ "Network Dependents • microsoft/TypeScript".
  10. ^ "Flow: A Static Type Checker for JavaScript | Flow". Retrieved 11 January 2023.
  11. ^ "Objects | Flow". Retrieved 18 January 2023.
  12. ^ a b Zahariev, George (16 February 2023). "Exact object types by default, by default". Retrieved 11 January 2023.
  13. ^ Candillon, William (2019-02-07). "Flow vs TypeScript in React — My two cents". Medium. Retrieved 2024-02-14.
  14. ^ Brzóska, Bazyli (2024-02-02), niieani/typescript-vs-flowtype, retrieved 2024-02-14
  15. ^ "Using Flow in WebStorm | The WebStorm Blog". The JetBrains Blog. 2016-11-21. Retrieved 2024-02-14.
  16. ^ Basil, Hosmer (18 February 2015). "Announcing Typecasts". Retrieved 18 January 2023.
  17. ^ Morrison, Jeff (18 February 2015). "Announcing Import Type". Retrieved 18 January 2023.
  18. ^ Rosenwasser, Daniel (20 February 2020). "Announcing TypeScript 3.8". Retrieved 18 January 2023.
  19. ^ Levi, Gabe (20 February 2015). "Announcing Flow Comments". Retrieved 18 January 2023.
  20. ^ Levi, Gabe (1 August 2016). "Windows Support is Here!". Retrieved 18 January 2023.
  21. ^ Vekris, Panagiotis (18 May 2020). "Types-First: A Scalable New Architecture for Flow". Retrieved 18 January 2023.
  22. ^ a b Bruno, Couriol (23 September 2021). "Flow Type Checker No Longer Just JavaScript with Types, Centers of Facebook Needs". Retrieved 18 January 2023.
  23. ^ Vekris, Panagiotis (25 May 2021). "Clarity on Flow's Direction and Open Source Engagement". Retrieved 18 January 2023.