3 ms·
> The reason is, the type system is actually incredibly complicated (to accommodate to all sorts of silly and messy things you can actually do in JavaScript).
by ttty 8y ago
> The reason is, the type system is actually incredibly complicated (to accommodate to all sorts of silly and messy things you can actually do in JavaScript).
Can you give some examples?
I have a feeling if you need that, you are writing some complicated magic code, but I might be wrong.
- acemarke 8y agoHere's a couple specific examples I just saw within the last couple days. `immer` is an immutable update library based on ES6 proxies. In addition to safely applying "mutative" code immutably, it also freezes the output to keep you from accidentally mutating it elsewhere. An Immer maintainer just added some kind of a `DeepReadOnly` tag to its typings in a patch release, which broke things for a bunch of people: https://github.com/mweststrate/immer/issues/289 https://github.com/mweststrate/immer/issues/289 This specifically broke our PR to convert `redux-starter-kit` to TS, with this lovely error message: https://github.com/reduxjs/redux-starter-kit/pull/73#issuecomment-453887310 https://github.com/reduxjs/redux-starter-kit/pull/73#issueco... I'm not saying every use of TS is that complex, but I do absolutely think that TS types can get ridiculously complex (and that people can get sucked into spending _way_ too much time trying to model dynamic JS behavior in static types).
- emmanueloga_ 8y agoYeah, if you read release notes for 2.8 [1], pretty much all of the features explained are things you probably don't want to use for every-day code. I'm pretty sure a lot of those additions were done for supporting different things in existing frameworks like React and others. The problem is, as soon as you provide those features, people will want to use them to add "type safety" to code that could otherwise be very simple. Sometimes simplicity is a better approach. This is why I say you will probably want to pick a subset of TS and leave the advanced types for interacting with legacy code or 3rd party libraries. Also, I'll leave this link here :-) [2] 1: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html https://www.typescriptlang.org/docs/handbook/release-notes/t... 2: https://github.com/Microsoft/TypeScript/issues/14833 https://github.com/Microsoft/TypeScript/issues/14833