#node.js #typescript #jsdoc #tsc #tsserver
Вопрос:
Можно ли использовать типы утилит, такие как Запись, при использовании JSDoc
tsserver
в обычном JavaScript?
(Я пытаюсь создать настройку, которая дает мне столько преимуществ машинописи, сколько я могу выдержать, без переноса)
Пример Кода
Мне действительно нужна карта, которая, как я понимаю, определена в машинописном тексте как «Запись».:
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"]
}
Для справки, вот как я настроил эль для использования tsserver
в моем .vimrc
:
let g:ale_linters = {'javascript': ['tsserver', 'jshint']}
Комментарии:
1. что показывает IDE, когда вы просто наводите курсор
Record
мыши ? Я получаю полное описание того, чтоRecord
происходит в машинописном тексте.
Ответ №1:
Record
тип определен в lib.es5.d.ts
, поэтому вам нужно добавить, по крайней мере es5
, в свой lib
массив.
Если вы не зададите lib
значение по умолчанию target
, но если вы его зададите , базовые библиотеки es должны быть включены вручную (обычно используются для сред с полифайлами, но не поддерживают новые языковые функции).
Комментарии:
1. Не могли бы вы привести конкретный пример того, как это выглядит? Как { lib: [«liba», «libb», «libc»] }? Или { lib: [«цель», «libc»] } Или что? И знаете ли вы, где я нахожу документацию для этого?
2. Последующие действия: прокомментируйте // «lib»: []. Установите «цель»: «es6» или «esnext» или что-то еще.