Typescript:require语句不是import语句的一部分

Typescript:require语句不是import语句的一部分,typescript,tslint,Typescript,Tslint,Typescript版本2.2.2 我在UserRoutzr.ts中写了这个require const users = <IUser[]> require(path.join(process.cwd() + "/data")); 如果我将其更改为: import users = <IUser[]> require(path.join(process.cwd() + "/data")); 我应该如何重写这篇文章? 感谢您的反馈TypeScript模块是ES6模块的实现。

Typescript版本2.2.2

我在UserRoutzr.ts中写了这个require

const users = <IUser[]> require(path.join(process.cwd() + "/data"));
如果我将其更改为:

import users = <IUser[]> require(path.join(process.cwd() + "/data"));
我应该如何重写这篇文章?
感谢您的反馈

TypeScript模块是ES6模块的实现。ES6模块是静态的。您的问题来自动态路径:
path.join(process.cwd()+“/data”)
。编译器在编译时无法确定它是哪个模块,linter不喜欢导致
any
的原因

您应该使用模块的静态路径。在编译时,TypeScript解析它。并且它会影响导出到
用户的正确类型(
IUser[]

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

注意:如果您的模块<代码>数据< /代码>只包含数据,您可以考虑将其更改为JSON文件,该文件可以加载(节点.js)或捆绑(WebPACK)。 更新(从2019年5月起)-也可以使用,TypeScript通过它接受静态和动态路径:

const users = await import("./yourModuleThatExportsUsers");
另请参见:

可能是您需要的,代码如下:

import {IUser} from './lib/user';
const users:IUser[] = require(path.join(process.cwd() + "/data"));

需要使用提供插件,但无论是require还是dynamic imports对我来说都不起作用,但这种构造有帮助:

module.exports = {
  // ..
  chainWebpack: (config) => {
    config.plugin('provide').use(require('webpack').ProvidePlugin, [
      // ..
    ])
  },

如果您可以正确运行代码,但eslint报告错误,则可以在错误代码上方添加
/*eslint disable*/
像这样


/* 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 目录
    }
};


你需要这样建造道路吗?您不能只使用“/”数据吗?假设进程是正在运行的进程。我尝试过,但在生成目录中不会定义./data?
module.exports = {
  // ..
  chainWebpack: (config) => {
    config.plugin('provide').use(require('webpack').ProvidePlugin, [
      // ..
    ])
  },

/* 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 目录
    }
};