gpt4 book ai didi

reactjs - React/Typescript/VScode - 导入路径不能以 '.tsx' 扩展名结尾

转载 作者:行者123 更新时间:2023-12-03 13:39:06 25 4
gpt4 key购买 nike

我有一系列已转换为 typescript 的 react 项目。其中一些使用 webpack,其中一些只使用 babel,因为它们是其他(webpack)项目/实际应用程序使用的库。

我已经将所有内容都转换为 typescript 没有问题,除了在一个非 webpack 项目中,我收到错误“导入路径不能以 .tsx 扩展名结尾”,例如

import LoadingLogo from '../ui/LoadingLogo.tsx';


我可以通过省略扩展或使用//@ts-ignore 来解决这个问题,但这些都不是最佳解决方案,因为项目在重构时将是 jsx 和 tsx 的混合体,我想成为能够一目了然地看到导入中使用的文件类型。

我将项目转换为 typescript 所采取的步骤是
  • 安装 typescript
  • 安装@babel/preset-typescript
  • 添加
  • presets: [ @babel/preset-typescript ]

    到我的 babel.config.js

    更令人困惑的是,在其他(非 webpack)应用程序之一中,我运行了相同的 babel 设置,但我没有看到这个问题。我有什么明显的遗漏吗?作为引用,我在有问题的项目中的 babel.config 看起来像这样
    module.exports = function(api) {
    api.cache(true);

    return {
    ignore: ['node_modules/**/*'],
    presets: [
    ['@babel/preset-typescript'],
    [
    '@babel/preset-env',
    {
    loose: true,
    targets: {
    node: 'current'
    }
    }
    ],
    '@babel/preset-react'
    ],
    env: {
    translations: {
    plugins: [
    'syntax-async-functions',
    '@babel/plugin-syntax-dynamic-import',
    'dynamic-import-node',
    [
    'react-intl',
    {
    messagesDir: './messages',
    enforceDescriptions: false
    }
    ]
    ]
    },
    production: {
    plugins: [
    'jsx-strip-ext',
    [
    'babel-plugin-styled-components',
    {
    ssr: true
    }
    ],
    'syntax-async-functions',
    '@babel/plugin-syntax-dynamic-import',
    'dynamic-import-node'
    ]
    },
    development: {
    plugins: [
    [
    'babel-plugin-styled-components',
    {
    ssr: true
    }
    ],
    'syntax-async-functions',
    '@babel/plugin-syntax-dynamic-import',
    'dynamic-import-node'
    ]
    }
    },
    plugins: [
    '@babel/plugin-transform-runtime',
    '@babel/plugin-syntax-dynamic-import',
    '@babel/plugin-syntax-import-meta',
    '@babel/plugin-proposal-class-properties',
    '@babel/plugin-proposal-json-strings',
    '@babel/plugin-transform-classes'
    ]
    };
    };

    我在没有问题的非 webpack 项目中的 babel 配置看起来像这样
    module.exports = function(api) {
    api.cache(true);

    return {
    presets: ['@babel/preset-typescript'],
    ignore: ['node_modules/**/*'],
    extends: 'myProject/babel.config.js',
    env: {
    production: {
    plugins: [
    [
    'module-resolver',
    {
    alias: {
    '^myProject/src/(.+)': 'myProject/lib/\\1'
    },
    extensions: ['.js', '.jsx'],
    stripExtensions: ['.js', '.jsx']
    }
    ],
    [
    'babel-plugin-styled-components',
    {
    ssr: true
    }
    ],
    'syntax-async-functions',
    '@babel/plugin-syntax-dynamic-import',
    'dynamic-import-node'
    ]
    },
    development: {
    plugins: [
    [
    'babel-plugin-styled-components',
    {
    ssr: true
    }
    ],
    'syntax-async-functions',
    '@babel/plugin-syntax-dynamic-import',
    'dynamic-import-node'
    ]
    }
    }
    };
    };


    两个项目的 tsconfig.json 看起来像这样
    {
    "compilerOptions": {
    "module": "esnext",
    "outDir": "dist/",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "sourceMap": true,
    "target": "ESNext",
    "allowJs": true,
    "checkJs": false,
    "jsx": "react",
    "pretty": true,
    "skipLibCheck": true,
    "strict": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "lib": ["dom", "dom.iterable", "ESNext"],
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "isolatedModules": true
    },
    "include": ["src"],
    "exclude": ["node_modules", "**/*.spec.ts"]
    }

    我的第一直觉是查看模块解析器插件,但这似乎没有任何区别。我有什么明显的遗漏吗?

    最佳答案

    很抱歉,我怀疑您是否能够以您希望的方式解决此问题。 TypeScript(特别是 TSC)不允许对 ts/tsx 文件进行显式扩展......它与导入中的隐式文件扩展名以及 ts/tsx 文件如何编译为 js/jsx 文件有关。 The world may not be happy about it ,但它似乎是它的方式。
    您可以使用 // @ts-ignore , 但后来我认为 you would lose intellisense
    更新 :我从下面的评论中注意到,一些 TypeScript 工具确实允许扩展。显然 Deno 需要它们,尽管我没有与 Deno 合作过。 TSC 编译器不允许它们。

    关于reactjs - React/Typescript/VScode - 导入路径不能以 '.tsx' 扩展名结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756485/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com