Я занимаюсь разработкой веб-приложения с использованием настраиваемого конвейера сборки для переноса моих исходных файлов и упаковки готового для браузера приложения. Мои исходные файлы - это модули ES6, использующие синтаксис import
/ export
, однако, кроме относительных имен файлов, объявление импорта импорта не имеет строгого сопоставления ни с каким файлом или пакетом, пока оно не будет разрешено конвейером сборки.
Таким образом, IntelliSense не может определить правильные типы из моих операторов импорта, и сейчас я ищу способ явного объявления типов импортированных символов.
Это не сработало:
// default import
/** @type {import("chai")} */ import chai from "..."
import /** @type {import("chai")} */ chai from "..."
// wildcard import
/** @type {import("chai")} */ import * as chai from "..."
import /** @type {import("chai")} */ * as chai from "..."
// destructuring
import { /** @type{import("chai").expect} */ expect } from "..."
import { /** @type{import("chai").ExpectStatic} */ expect } from "..."
// what even... o_O
import { expect as /** @type{import("chai").ExpectStatic} */ expect } from "..."
Проблема, по-видимому, заключается в том, что VSCode не будет обрабатывать комментарии JSDoc внутри ImportSpecifier
s, а вместо этого полагается на источник импорта, который может быть разрешен как с помощью относительного поиска файлов, так и путем разрешения установленного пакета NPM. Это означало бы, что мне пришлось бы добавить в мой код шумное заклинание с несколькими операторами, например:
import * as _chai from "..."
/** @type {import("chai")} */
const chai = _chai
const expect = chai.expect
// or with the built-in typings for chai:
import * as _chai from "..."
/** @type {Chai.ExpectStatic} */
const expect = _chai.expect
Есть ли способ объявить тип импортированного символа в операторе импорта, которыйне полагается на способность VSCode разрешать исходную строку импорта или использует встроенную типизацию?