编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”?

Posted

技术标签:

【中文标题】编译打字稿时如何防止错误“对象类型的索引签名隐式具有\'任何\'类型”?【英文标题】:How do I prevent the error “Index signature of object type implicitly has an 'any' type” when compiling typescript?编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”? 【发布时间】:2021-10-08 13:08:37 【问题描述】:

我尝试使用以下全局变量编写一些测试单元

declare global
  namespace NodeJS 
    interface Global 
      signin(): string;
    
  



global.signin = () =>  

  return ["test"] ;

;

我在 global.signin 上遇到错误:

“元素隐含地具有‘any’类型,因为类型‘typeof globalThis’没有索引签名。”

【问题讨论】:

这能回答你的问题吗? How do I prevent the error "Index signature of object type implicitly has an 'any' type" when compiling typescript with noImplicitAny flag enabled? signin 返回["test"],即string[],而不是string。修复该问题后,您的代码对我来说工作得很好。我猜您真正的问题出在您共享的代码之外。 问题出现了:为什么你需要做一些全球性的东西呢?为什么不提供一些单例服务或其他东西。或者依赖注入。有许多更好的方法可以让某些东西“全球化”。 @funkizer 添加 sting[] 不会改变错误 @funkizer 你能给我更多信息以更好地做到这一点吗?我想为测试单元制作全局。为了能够使用 global.signin 功能 【参考方案1】:

我也试过这段代码,我看到有人说它有效。但仍然是同样的错误。

   declare global 
      module NodeJS 
        interface Global 
          myConfig: any;
        
      
    
    
    global.myConfig = 'Hello!';

【讨论】:

以上是关于编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”?的主要内容,如果未能解决你的问题,请参考以下文章

使用打字稿时nodemon不刷新

gulp打字稿时的TypeError

尝试将 vue-cli 项目迁移到打字稿时出错 [关闭]

安装后的 webpack 在加载打字稿时失败

打字稿重复功能实现

使用打字稿时在Vue项目中注册第三方包