Typescript:require语句不是import语句的一部分
Typescript版本2.2.2 我在UserRoutzr.ts中写了这个requireTypescript: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模块的实现。
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 目录
}
};