Opinionated TS transpilation without overrides is problematic
See original GitHub issueCurrent behavior:
Cypress recently added better native support for TypeScript, a great step forward, thanks!
However, part of this process added the following defaults for ts-node
:
Specifically, esModuleInterop
is problematic. This is an opinionated transpilation, and cannot be overridden. Typically when working working with a JS / TS mix, you can either use imports such as
import * as Foo from 'foo';
or you can enable esModuleInterop
and do
import Foo from 'foo';
In my case, I chose the former, to reduce the “magic” that is done by the TypeScript compiler; however, because Cypress enforces the latter, I get lots of errors along the lines of
TypeError: Foo is not a function
Desired behavior:
A test frameworks authors should not enforce an opinion about how I build my application; this esModuleInterop
value should be possible to override. I tried manually changing it by editing the downloaded Cypress JS code in ~/.cache
, and the tests ran as expected.
Test code to reproduce
Working on a minimal reproduction, please give me a bit of time 😄
Versions
Cypress: 4.7.0
Issue Analytics
- State:
- Created 3 years ago
- Reactions:1
- Comments:11 (4 by maintainers)
Top GitHub Comments
I did move it, but this option was already there https://github.com/cypress-io/cypress/pull/7197/files#diff-0f01b0186fbd767d98bd689a60ddd05aL193
I do wonder if we really need it or not, and if we should overwrite it from the user’s TS config
The only block for me is to decide if it’s a breaking change or a bug. If it’s a bug, it can be fixed immediately. If it’s a breaking change, we need to wait for 5.0.