Closed peterfiorito closed 4 years ago
Encountered exact same issue with enums, also with the latest "ts-jest" package. The work around for this was to put enum in separate file after that it was correctly transpiled.
@riston I just went for the workaround of let enum: enum.propertyOfEnum = numberOfEnum as enum.propertyOfEnum; I will try exporting/importing the enums as you suggest, as it seems like a better patch/workaround.
Thanks for the awesome repo, I'm facing the same issue and not even the workaround mentioned by @riston is working for me.
@riston I've tried your workaround, but it's only work as a default export. The enum is correctly transpiled if it is in the same file. It looks like the enum will be loaded only after interpreting the file, when a named import is used.
Examples:
file1.ts
enum langauges {
DE = "de-DE",
EN = "en-EN"
}
console.log(langauges);
export {langauges}
file2.ts
import {languages} from './file1'
const translations = {
[languages.DE]: { }
}
Error: Cannot read property "DE" of undefined no console.log output
file1.ts
enum langauges {
DE = "de-DE",
EN = "en-EN"
}
console.log(langauges);
export default langauges
file2.ts
import languages from './file1'
const translations = {
[languages.DE]: { }
}
no errors console.log outputs { DE: 'de-DE', EN: 'en-EN' }
I also had to research a lot why my test files were throwing a type error when importing and using a constant enum. While removing the const
solved the problem I'd like to ask if there is any progress regarding this?
Tried using the plugin https://github.com/dosentmatter/babel-plugin-const-enum but haven't had any luck there either (though I may be missing something in setting it up?)
ts-jest
has e2e test on const enum as well as enum, the tests are successful. If you encounter any issues with const enum or enum, please create another issue. I will close this.
My solution was to mock the Enum.
in jest.config
=> setupFilesAfterEnv: ['<rootDir>/jest-setup.js'],
then in this file mock the enum jest-setup.js
enum example in src/types.d
export enum langauges {
DE = "de-DE",
EN = "en-EN"
}
const types = require('./src/types.d');
jest.mock('./src/types.d', () => ({
...types,
langauges: { DE : "de-DE", EN : "en-EN" },
}));
Issue :
Const enum still not working As stated on the documentation: https://kulshekhar.github.io/ts-jest/user/babel7-or-ts#no-const-enum, there is still some problems with const enum in TS. In issue #281 there was a reference to PR #505 as a possible solution and #697 as a release that featured those changes. I tried setting the useExperimentalLanguageServer flag to true in globals, and though it seems to not fail in the enums, it has problems resolving imported modules, both in relative and in aliased paths, throwing:
TSC language server encountered errors while transpiling. Errors: Cannot find module
If I set the flag to false, it just fails on const enums, which of course I can work around with the suggestedlet Enum: Enum = 1 as Enum
or similar approaches and everything works fine, but I was really hoping to give full support to the code without working around them. So, my main question or reason for reporting this, is that I am not sure of how the TSC language server works and why is it messing with module resolution when turned on.My settings:
jest.conf.js
tsconfig.json
babelrc
And just in case, error with routes using aliases:
TSC language server encountered errors while transpiling. Errors: Cannot find module '@/components/player/player.vue'.
Without aliases:
TSC language server encountered errors while transpiling. Errors: Cannot find module './player/player.vue'.
Everything working with the flag set to false and work around for const enum:
Expected behavior :
As stated in the title and description, I am pretty sure this is not an issue, since the repo specifically says this is a TS issue that they are not willing to fix/address, but just to be sure, I wanted to see if there was anything else at play. You can contact me in the ts-jest slack, I sent this same inquire in the general channel (Pedro/Peter is my handle and show name).
Thanks for your time. Have a great day.
Debug log:
Minimal repo :