如何在打字稿中使用笑话

时间:2019-09-16 09:07:48

标签: typescript jestjs

我有一个非常简单的问题:“如何用笑话来配置打字稿”。我知道这里有很多资源。但是没有一个解决方案对我有用。

这是我的jest.config.js

module.exports = {
    roots: [
        '<rootDir>'
    ],
    transform: {
        "^.+\\.ts$": "ts-jest"
    },
    testMatch: ['<rootDir>/tests/**/*.ts'],
    moduleFileExtensions: ['ts', 'js'],
    modulePaths: [
        '<rootDir>/src/js/'
    ],
    moduleNameMapper: {
        'Services(.*)': '<rootDir>/src/js/$1'
    },
};

第一个问题是模块名称映射器不起作用。我同时添加了modulePathsmoduleNameMapper,但没有一个起作用。简单地说:“找不到模块...”。

另一个问题是,当我伪造模块名称映射器(例如'i': '<rootDir>/src/js/State.ts'并使其工作时,我具有“意外的令牌导出”。但是我遵循了本指南https://basarat.gitbooks.io/typescript/docs/testing/jest.html,并且我使用了相同的代码就像该示例一样。我尝试使用babel开玩笑-相同。

当然,我尝试了谷歌搜索。但是没有成功。我尝试了不同的方法-没有结果。 我花了将近2个小时。我知道应该有一个简单的解决方案,因为笑话和打字稿是很受欢迎的软件包。

更新: 这是我的tsconfig.js

{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "es2015",
    "target": "es5",
    "jsx": "react",
    "allowJs": true
  }
}

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,我认为问题是双重的:

  1. 调整moduleNameMapper正则表达式
  2. Unexpected token export可能表示错误的tsconfig.json配置(例如module

1。)用regex boundaries 'Services(.*)'包裹^$,得到'^Services(.*)$'。否则会导致奇怪的错误,因为替换了模块名称的 all 个匹配子字符串。 另外,我不确定您是否很想'^Services/(.*)$'(包括“ /”)吗?当您的虚拟替换别名更改错误类型时,您的配置似乎具有不正确的正则表达式匹配项,但在其他方面也可以使用。

2。)如果没有特殊标志,节点将无法理解ES模块语法。您的错误表明,可能缺少从import/export到CommonJS require的转换步骤。如果设置为module,请检查tsconfig.json /测试配置中的"CommonJS"属性。考虑取决于target属性target === "ES3" or "ES5" ? "CommonJS" : "ES6"的{​​{3}}值。

更新:

如果在baseUrl中使用pathstsconfig.json别名配置,请确保还要在jest config中设置default。这有点多余,因此ts-jest提供了一个moduleNameMapper来从TS config中提取值。您可以看看helper

希望,这样可以解决您的问题,否则,完整的代码示例将对您有所帮助。