node.js - 将 Typescript 与 JSDoc 一起使用时,如何解决“找不到名称 'Record'”(或其他实用程序类型)?
问题描述
在纯 JavaScript 中使用JSDoc
+时是否可以使用 Utility 类型,例如 Record ?tsserver
(我正在尝试创建一个设置,让我尽可能多地获得 TypeScript 的收益,而无需进行转译)
示例代码
我碰巧实际上需要一张地图,据我所知,它在 TypeScript 中被定义为“记录”:
let http = require("http");
/**@type {Record<string, Person>} */
let people = {
"1234": { name: "Bob" },
"abcd": { name: "Jane" }
};
http.createServer(function (req, res) {
res.end(JSON.stringify(people));
}).listen(process.env.PORT || 3000);
错误
但是,当我尝试使用它时,会出现此错误:
[tsserver] Cannot find name 'Record'. [E]
配置
版本:
tsc --version
:
Version 4.3.5
tsconfig.json
:
{
"compilerOptions": {
"incremental": true,
"target": "ESNEXT",
"module": "commonjs",
"lib": ["DOM"],
"allowJs": true,
"checkJs": true,
"tsBuildInfoFile": "./cache",
"noEmit": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"moduleResolution": "node",
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["**/*.js"],
"exclude": ["node_modules"]
}
作为参考,这是我设置 aletsserver
在我的.vimrc
:
let g:ale_linters = {'javascript': ['tsserver', 'jshint']}
解决方案
Record
类型已定义,lib.es5.d.ts
因此您至少需要将其添加es5
到lib
数组中。
如果不设置lib
,则默认为target
,但如果设置,则必须手动包含基本的 es 库(通常用于具有 polyfills 的环境,但不支持新的语言功能)。
推荐阅读
- pluralize - 数量大于1时变复数
- java - 在jsp中查找未关闭的标签
- python - 将 ipython html 对象保存为 pdf
- amazon-polly - 带有 Amazon Polly 的 SSML 标签的情感 TTS
- cmd - 如何测试与 RabbitMQ 服务器的连接?
- python - 如何逐个单元格写入单行单元格并将其填充到csv文件中
- azure - Azure AD B2C - 交易时验证用户
- retrofit - Android Retrofit 2.0:对 HTTP 调用没有响应
- sql - SQL Developer DB2->Oracle 迁移存储过程
- c# - C#如何查找和替换字符串中的特定文本?