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