Typescript : require statement not part of an import statement

后端 未结 4 2349
我寻月下人不归
我寻月下人不归 2021-02-18 13:10

Typescript version 2.2.2

I wrote this require in my UserRoutzr.ts

const users =  require(path.join(process.cwd() + \"/data\"));

相关标签:
4条回答
  • 2021-02-18 13:36

    Needed to use provide plugin, yet neither require nor dynamic imports worked for me, this construct helped though:

    module.exports = {
      // ..
      chainWebpack: (config) => {
        config.plugin('provide').use(require('webpack').ProvidePlugin, [
          // ..
        ])
      },
    
    0 讨论(0)
  • 2021-02-18 13:38

    if your can run the code correctly but eslint report an error, you can add /* eslint-disable */above you error code like this

    
    /* eslint-disable */
    const path =  require("path");
    module.exports = {
        lintOnSave: false,
        chainWebpack: config => {
    
            const dir = path.resolve(__dirname, "src/assets/icons");
    
            config.module
                .rule("svg-sprite")
                .test(/\.svg$/)
                .include.add(dir).end() // 包含 icons 目录
                .use("svg-sprite-loader").loader("svg-sprite-loader").options({extract: false}).end();
            /* eslint-disable */
            config.plugin("svg-sprite").use(require("svg-sprite-loader/plugin"), [{plainSprite: true}] || []);
            config.module.rule("svg").exclude.add(dir); // 其他 svg loader 排除 icons 目录
        }
    };
    
    
    0 讨论(0)
  • 2021-02-18 13:39

    TypeScript modules are an implementation of ES6 modules. ES6 modules are static. Your issue comes from the dynamic path: path.join(process.cwd() + "/data"). The compiler can't determine which module it is at compile time, and the linter doesn't like the causes that lead to any.

    You should use a static path to the module. At compile time, TypeScript resolves it. And it affects the right exported type (IUser[]) to users.

    import users = require("./yourModuleThatExportsUsers");
    

    Notice: If your module data contains just data, you could consider to change it to a JSON file, which could be loaded (Node.js) or bundled (Webpack).

    UPDATE (from May 2019) — It is also possible to use dynamic import, with which TypeScript accepts static and dynamic paths:

    const users = await import("./yourModuleThatExportsUsers");
    

    See also: TypeScript 2.4 Release Notes

    0 讨论(0)
  • 2021-02-18 13:50

    may be you need dynamic module loading, and the code like this:

    import {IUser} from './lib/user';
    const users:IUser[] = require(path.join(process.cwd() + "/data"));
    
    0 讨论(0)
提交回复
热议问题