С этим https://code.visualstudio.com/docs/nodejs/working-with-javascript#_type-checking-javascript включен в настройках, есть некоторые объекты с допустимыми изменениями типа.
Примеры:
let options = {
logging: false,
}
if (process.env.DEBUG_LOG == "true") {
options.logging = console.info // vscode error: is not assignable to boolean
}
или
let pgconfig = {
ssl: { rejectUnauthorized: false },
max: 5,
}
if (process.env.NODE_ENV == 'development') {
//no SSL on localhost
pgconfig.ssl = false // vscode error
}
Эти изменения типа действительны для функций, использующих их.
Как заставить vscode понять, что оба работают, не используя
// @ts-ignore comment on the line before the error:
Это файл .js, а не .ts. Я попытался
let options = {
logging: <any> false,
}
or
let options = {
logging: false as any,
}
но они не работают в JS.
Дополнительная информация: https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html (не говоря о том, как обрабатывать изменения типа)
Спасибо. Я пытался, но вводит другие ошибки, например, на import file from './file.ts'
Я думаю, // @ts-ignore
это единственное решение для JS в этом случае?
Просто догадываюсь: может быть, вы могли бы сделать let options = {}; options.logging = false;
? (См. Литералы параметров являются открытыми.)
А, и в этом же разделе я вижу, что JSDoc тоже парсится. Таким образом, вы также можете использовать это как замену аннотациям типов!
Оба ваших последних варианта работают :) Спасибо, Томас! Я пошел с JSDoc. Не могли бы вы опубликовать это как ответ?
Начиная с литералы опций открыты, вы можете заставить компилятор получить тип any
для поля, назначив поле после создания объекта:
let options = {};
options.logging = false;
Альтернативой является использование JSDoc для добавления @type
тег, что позволяет вам быть немного более строгим, чем тип any
:
/** @type {{logging: (boolean|function(...*))}} */
let options = {
logging: false,
}
(Надеюсь, я правильно понял этот синтаксис, но я его не проверял. См. также Типы в системе типов закрытия.)
Можете ли вы просто переименовать файл в
.ts
, чтобы вы могли использовать аннотации типов TypeScript для руководства компилятором?