Michigan TypeScript
Michigan TypeScript
  • Видео 389
  • Просмотров 331 103
Inferred Type Predicates - TypeScript 5.5's top new feature
This has has been a top wishlist features for so many people for so many years. Dan tells the story of how he cracked it, then we do a deep dive on the code itself. Although this was a pretty technical conversation there ended up also being quite a lot of great conversation on staying motivated and thinking through all the aspects of the problem from side-effects to performance implications.
Links:
- Original PR github.com/microsoft/TypeScript/pull/57465
- A blogpost Dan wrote about it: effectivetypescript.com/2024/04/16/inferring-a-type-predicate
- The TypeScript release notes that cover it devblogs.microsoft.com/typescript/announcing-typescript-5-5-rc/#inferred-type-predicates
Dan Vanderkam ...
Просмотров: 1 495

Видео

no one writes JavaScript anyway.. ReScript: the ReasonML successor
Просмотров 8 тыс.4 месяца назад
ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript. It comes with a lightning fast compiler toolchain that scales to any codebase size. If you’re using a compiler and build step, you aren’t writing the code your users are running in the browser. If you need to “build” your web application, writing JavaScript is a choice. ReScript’s syntax allows devel...
how Andarist time-travel debugs the TypeScript compiler with Replay
Просмотров 4108 месяцев назад
Andarist loves fixing bugs - that's how he became a maintainer of several popular JS OSS projects and a contributor to the TypeScript compiler. In this video we look at how he uses Replay to debug the TypeScript compiler while he's doing all his cutting-edge advanced TypeScript work. *note:* This is (sortof) part 2 of a video with Mark (Erikson, of Replay.io) and Andarist. In Part 1 (ruclips.ne...
recording meetups like it's a 4,000 person conference: how and why
Просмотров 1,3 тыс.8 месяцев назад
Recently we've gotten a lot of questions from other meetup organizers (not just TypeScript people) about how we produce recordings and run our meetups. So... here's how we do it! After all, if our whole goal at MiTS is to provide resources for passionate TypeScript engineers.. running a meetup is a pretty common thing for such people to do, so it makes sense to talk about the technical side of ...
the time-traveling debugger from the future, Replay | Mark Erikson | TypeScript Showcase #10
Просмотров 6258 месяцев назад
Replay is a time-traveling debugger for JavaScript development. You can make recordings of your app and jump in and see what your code was doing at any instant. It includes deep React integration, collaboration tools, and E2E integrations. www.replay.io 00:00 in this episode 02:24 introductions 05:52 what is Replay? 08:31 a demo of Replay 16:29 it can step backwards! 17:47 it can jump to react ...
Distributive Conditionals as fast as possible
Просмотров 8858 месяцев назад
Distributive conditionals are a deep topic in the realm of advanced TypeScript. It's the sort of thing you maybe have tripped over it before, even without knowing it! This video is just the beginning, we're going to see this topic come up a lot in future Theorycraft episodes, so let us know what you want to hear about next! 0:00 what are distributive conditionals in TypeScript's type system? 1:...
Glide Data Grid with Jason Smith | TypeScript Showcase #9
Просмотров 7738 месяцев назад
Glide Data Grid with Jason Smith | TypeScript Showcase #9
assertUnreachable techniques with Ryan from the TypeScript team
Просмотров 9559 месяцев назад
assertUnreachable techniques with Ryan from the TypeScript team
that one weird trick to access array values: `T[number]`
Просмотров 7369 месяцев назад
that one weird trick to access array values: `T[number]`
Apollo Client with Lenz Weber-Tronic and Jerel Miller | TypeScript Showcase #8
Просмотров 56110 месяцев назад
Apollo Client with Lenz Weber-Tronic and Jerel Miller | TypeScript Showcase #8
effection with Charles Lowell | TypeScript Showcase #7
Просмотров 1,7 тыс.10 месяцев назад
effection with Charles Lowell | TypeScript Showcase #7
Redux, RTK-Query, Reselect with Lenz Weber-Tronic and Mark Erikson | TypeScript Showcase #6
Просмотров 1,4 тыс.11 месяцев назад
Redux, RTK-Query, Reselect with Lenz Weber-Tronic and Mark Erikson | TypeScript Showcase #6
TypeScript 5.2 - `using` Declarations and Explicit Resource Management | Release Report
Просмотров 59411 месяцев назад
TypeScript 5.2 - `using` Declarations and Explicit Resource Management | Release Report
TypeScript 5.2 - Type-Only Import Paths + TypeScript Implementation File Extensions | Release Report
Просмотров 14211 месяцев назад
TypeScript 5.2 - Type-Only Import Paths TypeScript Implementation File Extensions | Release Report
TypeScript 5.2 - `module` and `moduleResolution` Must Match Node.js Settings | Release Report
Просмотров 90111 месяцев назад
TypeScript 5.2 - `module` and `moduleResolution` Must Match Node.js Settings | Release Report
TypeScript 5.2 - Copying Array Methods | Release Report
Просмотров 12211 месяцев назад
TypeScript 5.2 - Copying Array Methods | Release Report
TypeScript 5.2 - Optimized Checks for Ongoing Type Compatibility | Release Report
Просмотров 7911 месяцев назад
TypeScript 5.2 - Optimized Checks for Ongoing Type Compatibility | Release Report
TypeScript 5.2 - Inline Variable Refactoring | Release Report
Просмотров 8411 месяцев назад
TypeScript 5.2 - Inline Variable Refactoring | Release Report
TypeScript 5.1 - Linked Cursors for JSX Tags | Release Report
Просмотров 4811 месяцев назад
TypeScript 5.1 - Linked Cursors for JSX Tags | Release Report
TypeScript 5.1 - Explicit `typeRoots` Disables Upward Walks for node_modules/@types | Release Report
Просмотров 7211 месяцев назад
TypeScript 5.1 - Explicit `typeRoots` Disables Upward Walks for node_modules/@types | Release Report
TypeScript 5.1 - Namespaced JSX Attributes | Release Report
Просмотров 9111 месяцев назад
TypeScript 5.1 - Namespaced JSX Attributes | Release Report
TypeScript 5.1 - `typeRoots` Are Consulted In Module Resolution | Release Report
Просмотров 13511 месяцев назад
TypeScript 5.1 - `typeRoots` Are Consulted In Module Resolution | Release Report
TypeScript 5.1 - Decoupled Type-Checking Between JSX Elements and JSX Tag Types | Release Report
Просмотров 8011 месяцев назад
TypeScript 5.1 - Decoupled Type-Checking Between JSX Elements and JSX Tag Types | Release Report
TypeScript 5.0 - `--moduleResolution bundler` | Release Report
Просмотров 39811 месяцев назад
TypeScript 5.0 - ` moduleResolution bundler` | Release Report
TypeScript 5.0 - Resolution Customization Flags | Release Report
Просмотров 83311 месяцев назад
TypeScript 5.0 - Resolution Customization Flags | Release Report
StringTs with Guga Guichard | TypeScript Showcase #5
Просмотров 80411 месяцев назад
StringTs with Guga Guichard | TypeScript Showcase #5
Conway's Game of Life implemented with TypeScript types | TypeScript Showcase Podcast #4
Просмотров 1,6 тыс.11 месяцев назад
Conway's Game of Life implemented with TypeScript types | TypeScript Showcase Podcast #4
inferred vs generated TypeScript types: how Payload CMS decided
Просмотров 1,3 тыс.Год назад
inferred vs generated TypeScript types: how Payload CMS decided
Pokémon speedrunners use TypeScript (!!?)
Просмотров 1,2 тыс.Год назад
Pokémon speedrunners use TypeScript (!!?)
TypeScript in the distant future
Просмотров 504Год назад
TypeScript in the distant future

Комментарии

  • @DIEZ919191
    @DIEZ919191 20 дней назад

    Finally, a way to get better at Typescript! You should think about becoming a teacher for yourself.

  • @DIEZ919191
    @DIEZ919191 20 дней назад

    Ok guys, let's be honest... you are saying it's easy level of challenges? I'm scared!

  • @EscapeFromDaSystem
    @EscapeFromDaSystem 29 дней назад

    this guy looks like he needs sun

  • @cerstvemlieko
    @cerstvemlieko Месяц назад

    Happy international programmers day 🍻🍻🍻

  • @kippeneneieren2039
    @kippeneneieren2039 Месяц назад

    lmao, Dan got a deep ass voice, goddamn

  • @ElCerdoBlanco
    @ElCerdoBlanco Месяц назад

    Actually I do like a good rant about JavaScript/TypeScript being terrible languages, but most of the problems here are just caused by not understanding, what enums are and how they work. Most of the problems addressed here would also pop up in most other languages.

  • @JEsterCW
    @JEsterCW Месяц назад

    Good and quick showcase of this lovely language.

  • @mm59611
    @mm59611 2 месяца назад

    6:15 My exact experience with this one. This series has been very helpful btw. Thank you!

  • @2005bgva
    @2005bgva 2 месяца назад

    Very interesting, thanks.

  • @2005bgva
    @2005bgva 2 месяца назад

    Very interesting, thanks.

  • @2005bgva
    @2005bgva 2 месяца назад

    Ian, Thaks for your video, it was very usefull for me. Please you don´t stop.

  • @AbrahamSangha
    @AbrahamSangha 3 месяца назад

    This one has been updated to include tuple test cases. This works: type Concat<T extends readonly unknown[], U extends readonly unknown[]> = [...T, ...U]

  • @kasper_573
    @kasper_573 3 месяца назад

    Been exploring rescript the past couple of days. Seems really good. Only bummer so far is the lack of macro system. They have something called PPX, but that’s apparently an ocaml thing that rescript users are discouraged from using.

  • @yonas6832
    @yonas6832 3 месяца назад

    great talk

  • @FunctionGermany
    @FunctionGermany 3 месяца назад

    "dont use semver", but isn't semver basically what he described? deriving maj/min/patch bumps from the the type of changes?

    • @MichiganTypeScript
      @MichiganTypeScript 3 месяца назад

      check out the original video: Sam goes into (more) pretty extensive technical depth as to why what he's describing is different from semver

    • @FunctionGermany
      @FunctionGermany 3 месяца назад

      @@MichiganTypeScript ok, thanks

  • @СвятославКобывников-щ7г

    🤯

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      this one really is special, isn't it?

    • @СвятославКобывников-щ7г
      @СвятославКобывников-щ7г 4 месяца назад

      @@MichiganTypeScript yes. Firstly I try to solve by myself, but when it takes too much time I suppose there should be some trick. This one is too tricky)))

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      @@СвятославКобывников-щ7г that's definitely the best way to do it!

  • @pashabezk
    @pashabezk 4 месяца назад

    I think it would be interesting to extend this task to check for "never". Equal<ObjectEntries<{key: never}>, ['key', never]> Equal<ObjectEntries<{key?: never}>, ['key', never]> To tell you the truth, I cannot solve challenge with never. Because if I add an IsNever<> check for values, I will crash the IsUndefined<> check. So it would be interesting to see a solution to this problem

  • @pashabezk
    @pashabezk 4 месяца назад

    To tell tou the truth, I cannot solve first challenges. And I like that after a couple of dozen tasks I look at this task and think: wow, it’s simple. Great progress! Thank you! You really help people!

  • @pashabezk
    @pashabezk 4 месяца назад

    I don't understand why do we need P=PropertyKey in generic, and why solution don't work if we directly pass PropertyKey extends K?

    • @mm59611
      @mm59611 2 месяца назад

      Distributive conditional types are only applied when testing against generic arguments I believe. If you don't pass in PropertyKey as a generic argument, then you are testing if (string | number | symbol) extends IndexSignatureType which will always fail, except in the case that the index signature is (string | number | symbol) because a broader type cannot extend a more narrow type. However, if we pass in PropertyKey as a generic argument, then union members of PropertyKey get distributed on the conditional type so that it looks more like this (assuming the index signature type is string): string extends string | number extends string | symbol extends string. 'string extends string' passes, which removes it from the mapped type. // "foo" type Foo = PropertyKey extends string | number | symbol ? "foo" : "bar"; // "bar" type Bar = PropertyKey extends string ? "foo" : "bar"; // "foo" | "bar" | "baz" type FooBarBaz<T = PropertyKey> = T extends string ? "foo" : T extends number ? "bar" : T extends symbol ? "baz" : never;

  • @mahmoodsagharjooghi
    @mahmoodsagharjooghi 4 месяца назад

    Loved it!

  • @pashabezk
    @pashabezk 4 месяца назад

    For a long time I could not figure out how to check for an empty object, and I found a solution: {} extends Head (as extra branch after checking Falsy). But your way ({[p: PropertyKey]: never}) is cool too. Thanks for great challenges!

    • @pashabezk
      @pashabezk 4 месяца назад

      My full solution (the same as yours, but with extra branch to check empty object) type AnyOf<T extends readonly any[]> = T extends [infer Head, ...infer Tail] ? Head extends 0 | "" | false | [] | null | undefined ? AnyOf<Tail> : {} extends Head ? AnyOf<Tail> : true : false;

  • @wildinsights5033
    @wildinsights5033 4 месяца назад

    why is it so hard to memorize this shit.

  • @kasper_573
    @kasper_573 4 месяца назад

    Great interview! It’s so fun to see the journey of how something grew into its final form.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      Thanks! We're really happy with how it turned out, too!

  • @JoeyGravlin
    @JoeyGravlin 4 месяца назад

    Amazing interview, learned a lot. Dan has some great insights and MiTS coming in clutch with thoughtful questions. Stay gold.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      Dan is 🥇 for sure! We're always happy to have him back on the channel!

  • @hansschenker
    @hansschenker 4 месяца назад

    I like the format, but It is only as good as the people are. It must be people of the format of Dan or Josh! If you can catch them do it!

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      that's fantastic feedback to have! we care a lot about quality of these discussions so please continue to share your most candid feedback. also.. yeah...😅 I guess we did set the bar quite high by starting off with Dan and this particular feature!

  • @hansschenker
    @hansschenker 4 месяца назад

    Dan should give a workshop:"Typescript Deep Dive", he sure has a ton of interesting Typescript Type material!

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      we're toying around with the idea of doing a series of videos covering the 83 specific things mentioned in his book. but Dan _is_ also speaking at SquiggleConf (in Boston, October), so who knows: maybe he'll do a deep dive on something there.

    • @hansschenker
      @hansschenker 4 месяца назад

      @@MichiganTypeScript My Proposals would be:Titian Cernicova-Dragomir, gabriel vergnaud, Stefan Baumgartner

    • @MichiganTypeScript
      @MichiganTypeScript 3 месяца назад

      @@hansschenker thanks for the suggestion! We reached out to Titian and we're meeting with him late next week to do a similar video on Isolated Declarations

    • @hansschenker
      @hansschenker 3 месяца назад

      @@MichiganTypeScript Very good - Titian is a real expert!

  • @MichiganTypeScript
    @MichiganTypeScript 4 месяца назад

    PR author interviews like this have been something we've been wanting to do for a long long time, and we're so excited to finally get it started! Let us know what you think of this format and what kinds of PRs you'd like to see in the future.

  • @themykolas
    @themykolas 4 месяца назад

    "God forbid vanilla javascript" Been writing simple web-components with vanilla JS and don't want to look back.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      if that works for you then full support from us!

    • @PeterStJ
      @PeterStJ 3 месяца назад

      same... I think it's a big misconception with types is that it pays off compared to the investment. my observations (and I was dealing with types even before typescript - back when google closure compiler was using es4-like types) is that the overall benefit does not contend the extra effort.

  • @Dylan_thebrand_slayer_Mulveiny
    @Dylan_thebrand_slayer_Mulveiny 4 месяца назад

    33:54 dear god what even is that syntax. Let statements inside an object closure? No thanks. 55:08 "Sometimes typescript forces you to code defensively". Yeah, that's actually a good thing. Defensive coding/early returns is a GOOD pattern not a bad one. I'm glad this wasn't adopted. That looks like an absolute nightmare.

    • @SubhashishPradhan
      @SubhashishPradhan 4 месяца назад

      Let statements inside block scope is an intrinsic feature of JavaScript. However when the same thing is done in ReScript as shown in 33:54 it's a no no for you? Double standards. Give it a chance before you spread negativity.

    • @Dylan_thebrand_slayer_Mulveiny
      @Dylan_thebrand_slayer_Mulveiny 4 месяца назад

      @@SubhashishPradhan That's not a closure that's an object statement.

    • @SubhashishPradhan
      @SubhashishPradhan 4 месяца назад

      ReScript language documentation disagrees with you.

    • @bradmilburn8329
      @bradmilburn8329 4 месяца назад

      He was referring to type guards

    • @SubhashishPradhan
      @SubhashishPradhan 4 месяца назад

      Type guards were shown in 55:08. I haven't commented on that.

  • @D_bugit
    @D_bugit 4 месяца назад

    Some part of it feels like kotlin

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      haven't used Kotlin: which parts seem similar?

    • @D_bugit
      @D_bugit 4 месяца назад

      @@MichiganTypeScript how the code is structured, in kotlin functions we can omit the open and closing bracket and all the logic will be inside as a scope of it and the last item will be returned as a value... You could Google and see how it is or to save some time just google for how to use "when expression in kotlin" and you will realize what I want say🙂🙂

  • @TymurDaudov_aka_tymfear
    @TymurDaudov_aka_tymfear 4 месяца назад

    When you try to convince somebody and then start using words like "magical" :D :D

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      are you saying magic is good or bad?

    • @mrlectus
      @mrlectus 4 месяца назад

      @@MichiganTypeScript it's bad

    • @TymurDaudov_aka_tymfear
      @TymurDaudov_aka_tymfear 4 месяца назад

      @@MichiganTypeScript Bad. When you’re trying to convince engineers magic is the last thing you want to mention 😀

  • @peterchuk6718
    @peterchuk6718 4 месяца назад

    I write, in fact I avoid all the compilers

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      we've been thinking of making a video on writing machine code with a quill. would that be interesting?

  • @irlshrek
    @irlshrek 4 месяца назад

    i really wish rescript won over typescript. its just SO much better. its like rust but in the JS ecosystem

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      there's still time. after all: at this point, we don't need "winners" and "losers" because it's not zero-sum. e.g. If webassembly opens a lot of doors

  • @adicide9070
    @adicide9070 4 месяца назад

    thanks for presenting this. I think that TypeScript is a mashed together little monster and it is meh at best. But OCaml derivatives like Rescript need a lot of promotion to get out there, and talks like this look to be a part of it.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      would you agree that, ultimately, it's JavaScript that's the mashed together little monster and TypeScript makes it more bearable (although, we understand the "lipstick on a pig" vibes some people get from it)? And thanks: we really want to surface things like ReScript (and others!) because of the whole "rising tide lifts all boats" thing.

    • @adicide9070
      @adicide9070 4 месяца назад

      @@MichiganTypeScript hehe wait, what other boats?

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      @@adicide9070 programming languages

  • @TJ-hs1qm
    @TJ-hs1qm 4 месяца назад

    23:30 this kind of elite speak ("polymorphic variant") can easily be avoided (even "sum type" or "product type" would have been better) Scott Wlaschin has demonstrated many times that you can teach fp concepts with no gobbledygook

    • @akis854
      @akis854 4 месяца назад

      It’s not elite, it’s just unfamiliar. OOP has tons of jargon for example, and it’s not labeled as “elite”. It’s also a different concept from a “sum type” (and especially from “product type”)

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      asking for a friend... what's the difference between a polymorphic variant, a sum type, and a product type?

    • @akis854
      @akis854 4 месяца назад

      @@MichiganTypeScript Great question! Here's how I think about it: A sum type is a type-level "OR". If a `foo` type is either A | B | C - it has 3 possible states (that's where the "sum" part comes from, 1 + 1 + 1). In typescript terms, this is a discriminated union. A product type is your typical struct/record found in almost all languages, in the case of JS that would be an object. It's called "product", because you have to multiply (cartesian product) all the combinations of the fields to get the number of states. If you have a record User with 3 boolean fields, it would have 6 possible states (2x2x2). A polymorphic variant is similar to a sum type, but solves certain problems where you'd want to use the same variant constructor in multiple places. Probably best to refer to Rescript and OCaml docs for more details, I don't think I can do them justice in this format :) ocaml.org/manual/5.2/polyvariant.html rescript-lang.org/docs/manual/latest/polymorphic-variant

    • @TJ-hs1qm
      @TJ-hs1qm 4 месяца назад

      ​@@MichiganTypeScript A sum type is basically like an enum, an enumeration type has a limited/fixed number of variations, for example TimeOfDayEnum = PM | AM or LedEnum = Red | Green | Blue. In type theory, a type with a fixed number of variants goes by "sum type". The idea is that the total number of possible values for this type is simply the sum of its variants. TimeOfDayEnum has 2 possible values and LedEnum 3. A product type, on the other hand, is more like a record. For example, a Coordinate record can have entries for X and Y. Coordinate(X, Y). The number of possible values for Coordinate is the product of all possible values for X and Y, i.e., X times Y. Hence, the name product type (for example, Coordinate has 2 x 3 = 6 possible values for values int X = 1..2 and int Y = 1..3). Sum types and product types go also by the name Algebraic Data Type (ADT). Algebraic is math speak for types that combine. Example: take Person(Name, AgeCategory) where AgeCategory = Minor | Adult. Person is a product type combined with a Name and a sum type. Sum Type can also consist of other sum types or product types. Deeply nested or recursive Sum Types and Product types are possible too (json). In OCaml, sum types are also called Variants. For polymorphic variants google up "Polymorphic vs. ordinary variants in OCaml" (Yehonathan Sharvit).

    • @TJ-hs1qm
      @TJ-hs1qm 4 месяца назад

      @@akis854 apologies, I was being too dramatic 😆

  • @SuperHeroINTJ
    @SuperHeroINTJ 4 месяца назад

    ReScript is not a sucessor to ReasonML. ReasonML does native. ReScript does not. I used to use Reason for native applications. Melange is a sucessor to Reason.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      this came up on twitter: thanks for the clarification. it's genuinely hard to get all of this straight: we're hoping that someone from the ReScript/ReasonML/Melange camps (even one person!) will accept our very-genuine offer to make a quick video breaking it all down, but no bites yet (although some people did some good stuff trying to whiteboard it).

  • @nsk8ter524
    @nsk8ter524 4 месяца назад

    I remember trying to pick up ReasonML before typescript took off. The support for it was minimal across IDEs and trying to use it was painful. I dropped it and assumed Reason died a few years ago. Calling a typescript competitor the Reasonml successor is just bad branding. No one wants to use reasonml, dont associate with it. But we do need a faster and open source version of something that is like typescript.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      > No one wants to use reasonml, dont associate with it. > But we do need a faster and open source version of something that is like typescript. not arguing (asking humbly): these back-to-back statements seem contradictory. Is it just that you don't like ReScript or that you _do_ like ReScript and want to break any associations between ReScript and ReasonML?

  • @xpynim
    @xpynim 4 месяца назад

    functional?

  • @pookiepats
    @pookiepats 4 месяца назад

    ReasonML is dead because Rescript gutted it, left the libs in shambles; cautionary tale. WHY in the world would I want to use a programming language that CHOSE to split from the OCAML compiler compat.... that judgement basis alone stripped it of so much of its value offering. Now I should bank on a rag tag group of volunteers out on a proverbial island to support my web technologies... nope.

    • @MichiganTypeScript
      @MichiganTypeScript 4 месяца назад

      the "rag tag group of volunteers" part resonates for sure - it's scary to step into the unknown, especially with your company's techstack at its mercy. would your opinion be different if ReScript has a corporate sponsor/overlord?

    • @pookiepats
      @pookiepats 4 месяца назад

      @@MichiganTypeScript sadly yes. It’s lame in the sense that I love languages and I want to see them all prosper like i want to adopt all shelter dogs but it’s a different reality when you’re making a decision about what your startup will be built on. I spent time learning OCAML leading up to the events that created Rescript, with the intention of transitioning from OCAML to Reason to build my web application-then I find out about all these changes in the ecosystem. Admittedly i was salty because I really enjoyed OCAML lol but still i would imagine many folks are in my boat and would be deterred by the same factors. Observing an ecosystem in the macro and seeing this kind of odd split is an immediate red flag. I’m sure it’s less scary for those already in it or that have no choice. P.S.- I ended up going with Swift :^|