要求语句不是导入语句的一部分。eslint@typescript-eslint/no-var-需要从存储中导入打字稿

Posted

技术标签:

【中文标题】要求语句不是导入语句的一部分。eslint@typescript-eslint/no-var-需要从存储中导入打字稿【英文标题】:Require statement not part of import statement.eslint@typescript-eslint/no-var-requires importing typescript from storage 【发布时间】:2021-01-08 23:21:54 【问题描述】:

我必须从 Firebase 存储桶中导入一个打字稿文件。它包含数据和类型定义。

export interface MyData 
 // ...


export const myData = 
 // ...


这是我附带的代码:

export const readData = async (fileDir: string, fileName: string): Promise<object> => 
  // Open the bucket
  const bucket: Bucket = admin.storage().bucket()
  // Define the file path in the bucket
  const filePath: string = path.join(fileDir, fileName)
  // Define the local file path on the cloud function's server
  const tempFilePath: string = path.join(os.tmpdir(), fileName)
  // Download the file from the bucket
  try 
    await bucket.file(filePath).download( destination: tempFilePath )
   catch (error) 
    functions.logger.error(error,  structuredData: true )
  
  // Extract the needed variable export from the file
  const data = require(tempFilePath)
  // provide the variable
  return data

eslint 抱怨:

require 语句不属于 import statement.eslint@typescript-eslint/no-var-requires

开启:

const data = require(tempFilePath)

导入文件的正确方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

eslint 错误信息包含错误代码“typescript-eslint/no-var-requires”。对该字符串进行网络搜索会出现documentation:

除了 import 语句外,不允许使用 require 语句 (无变量要求)

也就是说,var foo = require("foo")等形式的使用是 禁止。而是使用 ES6 样式导入或 import foo = require("foo") 进口。

您将不得不放松您的 eslint 规则以避免此消息(不推荐),或者接受它的建议并更改您的代码语法以使用 import

如果您使用的是 TypeScript,则应阅读 dynamic imports 的文档,该文档可用于 import() 函数。

【讨论】:

谢谢, const data = await import(tempFilePath) 效果很好。 我遇到的类似问题:***.com/questions/66179935/…(包括解决方案)

以上是关于要求语句不是导入语句的一部分。eslint@typescript-eslint/no-var-需要从存储中导入打字稿的主要内容,如果未能解决你的问题,请参考以下文章

命名空间内的 JetBrains Rider 导入引用

MySQL优化:其他注意事项

PyCharm 中未使用的错误导入语句?

如何在 Web 应用程序(ASP.NET Core)中使用 TypeScript 导入语句而不是 <reference path...>?

SQL REPLACE 语句替换部分数字不是全部

JSP中插入javascript语句,要求用一个正则表示验证输入的用户名是不是含有空格