【问题标题】:Could not find a declaration file for module implicitly has an 'any' type - while importing part of CommonJS module找不到隐含“任何”类型的模块的声明文件 - 在导入部分 CommonJS 模块时
【发布时间】:2019-12-12 21:24:23
【问题描述】:

目前,该项目有一个 CommonJS 模块,用于存储仅在一个文件中维护的配置值:

module.exports = {
  classA: `classA`,
  classB: `classB`
  classC: `classC`
}

这允许稍后通过执行以下操作重用它们来生成 JS 选择器:

const CLASSES = require('./classes')

const SELECTORS = Object.keys(CLASSES).reduce((obj, key) => {
  const selectorKey = key.replace(`class`, `selector`)

  obj[selectorKey] = `.${CLASSES[key]}`

  return obj
}, {})

module.exports = SELECTORS

选择器稍后也用于代码逻辑,并传递给 PostCSS 配置,后者生成要在.pcss 文件中使用的变量列表。

这一切都超级方便,有助于开发流程,而且 CommonJS 允许在需要时仅将特定值导入组件,例如:

import { classA } from './path/classes

它像梦一样工作,它仍然如此,但是,在 typescript 文件中以相同的方式导入它不满足 tslint 约束,它会发出错误警告: Could not find a declaration file for module implicitly has an 'any' type:

这里是 tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "noImplicitThis": true,
    "baseUrl": ".",
    "types": [
      "webpack-env",
      "jest"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

所以我想知道是否有一种有效的方法来取悦 TS 大神并以某种方式声明模块类型,或者至少在保留当前功能的同时重写呈现的逻辑。

P.S: 在与鸭子交谈后,我得出结论,将其重写为 ts 模块将阻止在 postcss 配置中要求选择器的可能性,因为它不支持 ES6 import

【问题讨论】:

    标签: javascript typescript commonjs


    【解决方案1】:

    我找到的解决方案是将"allowJs": true, 选项添加到tsconfig.js 文件

    【讨论】:

      猜你喜欢
      • 2020-03-30
      • 2017-05-08
      • 2017-05-18
      • 2021-12-03
      • 2021-11-06
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多