【问题标题】:Gatsby with Typescript importing assets error (ts2307)Gatsby 与 Typescript 导入资产错误 (ts2307)
【发布时间】:2021-07-03 22:27:04
【问题描述】:

我正在尝试使用 import

添加图片
import image from '../assets/images/picture.jpg 

我在 gatsby 中使用 Typescript ... 奇怪的是 它在普通 javascript 中工作正常.js ~ .jsx 文件)但是当我使用时(.ts ~ .tsx 文件)它抛出这个错误

找不到模块“../assets/images/picture.jpg”或其对应的类型声明。ts(2307)

奇怪的是它与普通组件一样工作正常

import Header from '../components/Header'

这是我的 tsconfig.json 文件

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "esnext",
    "jsx": "preserve",
    "lib": [
      "dom",
      "es2015",
      "es2017"
    ],
    "strict": true,
    "noEmit": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "removeComments": false,
    "preserveConstEnums": true
  },
  "include": [
    "./src/**/*"
  ]
}

这里是 gatsby-config.json 文件

module.exports = {
  /* Your site config here */
  plugins: [
    {
      resolve: `gatsby-plugin-typescript`,
      options: {
        isTSX: true, // defaults to false
        jsxPragma: `jsx`, // defaults to "React"
        allExtensions: true, // defaults to false
      },
      
    },
  ],
}

文件夹结构

    • 组件
      • MainComponent.tsx
      • Header.tsx
    • 资产
      • 图片
        • 图片.jpg

【问题讨论】:

  • 你能分享一下你的项目结构吗?
  • @FerranBuireu 我添加了它
  • Typescript 不处理图像导入,webpack 可以。也许只是将 allExtensions 改回 false。
  • 实际上,它确实...我在使用 typescript 的反应中使用了图像导入

标签: typescript visual-studio-code import gatsby tsconfig


【解决方案1】:

在文件夹src中创建index.d.ts文件,并添加这一行

declare module "*.jpg"
declare module "*.png"
declare module "*.svg"

参考:Importing images in TypeScript React - "Cannot find module"

感谢 ferran-buireu 清除所有查询。

【讨论】:

    【解决方案2】:

    这是多余的:

    import Header from '../components/Header'
    

    因为它们在同一个文件夹中,所以您可以:

    import Header from './Header'
    

    关于资产,您可以关注这个类似的问题Importing images in TypeScript React - "Cannot find module" 以获得一些想法,但您可以通过以下方式轻松修复它:

    const image = require('../assets/images/picture.jpg')
    

    注意:我猜这是答案中的错字,但您在 import image from '../assets/images/picture.jpg 的输入中缺少尾随引号

    另外,尝试将allExtensions布尔值改回false:

        allExtensions: false,
    

    感谢Kyle Mathews

    【讨论】:

    • 首先感谢 Ferran 的帮助。但重点是我构建她的示例与我遇到问题的示例类似..但重点是我通常在反应中使用此代码(从'../assets/images/picture.jpg'导入图像)带有打字稿的应用程序,一切正常……它只是不适用于 gatsby
    • 这是因为您的tsconfig.json 的声明和include 规则。查看 Gatsby 的示例 github.com/gatsbyjs/gatsby/blob/master/examples/…
    • 我在 react 中使用了同样的东西并且它有效..为什么 id 不适用于 gatsby
    • Typescript 插件有一些注意事项 (gatsbyjs.com/plugins/gatsby-plugin-typescript/#caveats),这就是为什么相同的配置可能无法正常工作
    猜你喜欢
    • 2016-05-18
    • 2017-12-10
    • 1970-01-01
    • 2022-10-22
    • 2016-04-25
    • 2017-03-18
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多