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

12 typescript tslint

打字稿版本2.2.2

我在UserRoutzr.ts中写了这个要求

const users = <IUser[]> require(path.join(process.cwd() + "/data"));
Run Code Online (Sandbox Code Playgroud)

TSLint提出以下警告:

require statement not part of an import statement
Run Code Online (Sandbox Code Playgroud)

如果我改为:

import users = <IUser[]> require(path.join(process.cwd() + "/data"));
Run Code Online (Sandbox Code Playgroud)

然后它引发了一个错误:

TS1003 Identifier expected
Run Code Online (Sandbox Code Playgroud)

我该如何重写这个要求?谢谢你的反馈

Pal*_*leo 16

TypeScript模块是ES6模块的一种实现.ES6模块是静态的.你的问题来自动态路径:path.join(process.cwd() + "/data").编译器无法确定编译时它是哪个模块.

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

import users = require("./yourModuleThatExportsUsers");
Run Code Online (Sandbox Code Playgroud)

注意:如果您的模块users只包含数据,您可以考虑将其更改为JSON文件,该文件可以加载(Node.js)或捆绑(Webpack).


小智 5

如果您可以正确运行代码但 eslint 报告错误,您可以/*\xc2\xa0eslint-disable\xc2\xa0*/在错误代码上方添加\n这样

\n
\n/*\xc2\xa0eslint-disable\xc2\xa0*/\nconst path =  require("path");\nmodule.exports = {\n    lintOnSave: false,\n    chainWebpack: config => {\n\n        const dir = path.resolve(__dirname, "src/assets/icons");\n\n        config.module\n            .rule("svg-sprite")\n            .test(/\\.svg$/)\n            .include.add(dir).end() // \xe5\x8c\x85\xe5\x90\xab icons \xe7\x9b\xae\xe5\xbd\x95\n            .use("svg-sprite-loader").loader("svg-sprite-loader").options({extract: false}).end();\n        /*\xc2\xa0eslint-disable\xc2\xa0*/\n        config.plugin("svg-sprite").use(require("svg-sprite-loader/plugin"), [{plainSprite: true}] || []);\n        config.module.rule("svg").exclude.add(dir); // \xe5\x85\xb6\xe4\xbb\x96 svg loader \xe6\x8e\x92\xe9\x99\xa4 icons \xe7\x9b\xae\xe5\xbd\x95\n    }\n};\n\n
Run Code Online (Sandbox Code Playgroud)\n

  • 这将禁用整个文件的所有 eslint 检查。最好仅针对所需的规则和线路禁用它。 (7认同)
  • `// eslint-disable-next-line @typescript-eslint/no-var-requires` 是一个更好的选择 (2认同)