Node.js @types/Node中的节点类型未按预期应用

Node.js @types/Node中的节点类型未按预期应用,node.js,typescript,Node.js,Typescript,我开始为TypeScript重新设计工具,到目前为止我很喜欢它。然而,我仍然会遇到一些神秘的行为,让我觉得我错过了什么。例如,我遇到了一个“隐式'any'”类型错误(我有strict:true,并且希望如此),据我所知,应该由@types/node覆盖。当然,我可以通过显式键入来修复它,但我想知道为什么无法识别从@types/node键入的内容 创建package.json:npminit-y(严格来说不是必需的,但很有帮助) 安装TypeScript、节点12 tsconfig默认值和节点类型

我开始为TypeScript重新设计工具,到目前为止我很喜欢它。然而,我仍然会遇到一些神秘的行为,让我觉得我错过了什么。例如,我遇到了一个“隐式'any'”类型错误(我有
strict:true
,并且希望如此),据我所知,应该由
@types/node
覆盖。当然,我可以通过显式键入来修复它,但我想知道为什么无法识别从
@types/node
键入的内容

  • 创建
    package.json
    npminit-y
    (严格来说不是必需的,但很有帮助)
  • 安装TypeScript、节点12 tsconfig默认值和节点类型:
    npm i-D TypeScript@tsconfig/node12@types/Node
  • 创建
    tsconfig.json
    (见下文)
  • 创建
    src/demo.ts
    (见下文)
  • 运行
    tsc
    /node\u modules/.bin/tsc
  • tsconfig.json

    {
    “扩展”:“@tsconfig/node12/tsconfig.json”,
    “编译器选项”:{
    “outDir”:“/build”,
    “rootDir”:“/src”
    }
    }
    
    src/demo.ts

    consthttp=require('http'))
    http.get('http://google.com,res=>console.log(res))
    
    遵循这些步骤会产生以下类型错误:

    src/demo.ts:3:31 - error TS7006: Parameter 'res' implicitly has an 'any' type.
    
    3 http.get('http://google.com', res => console.log(res))
    
    除非我遗漏了什么,否则在
    @types/node
    中键入应该能够推断
    res
    属于
    IncomingMessage
    类型。From(格式化为SO):

    函数get(
    选项:请求选项|字符串| URL,
    回调?:(res:IncomingMessage)=>void
    ):ClientRequest;
    
    我在
    tsconfig.json
    中查看了
    typeroot
    ,TS文档指出这是不必要的(类型应该在
    节点模块中自动找到)。我还尝试了
    /
    ,但没有成功

    我想了解为什么
    ref
    没有被识别为类型
    IncomingMessage

    软件包版本:

    • @tsconfig/node12:^1.0.7
    • @类型/节点:^14.11.10
    • @types/typescript:^4.0.3

    除非使用ES导入,否则导入模块的类型不会生效。将错误代码更改为正确代码,如下所示:

    错 对的
    啊,这就解释了…很高兴知道,谢谢!有点让我希望TypeScript会警告我CJS导入!
    const http = require('http')
    
    http.get('http://google.com', res => console.log(res))
    
    import * as http from 'http'
    
    http.get('http://google.com', res => console.log(res))