VSCode предоставляет intellisense для Foo.js через соответствующий Foo.d.ts только тогда, когда он куда-то импортирован; как включить intellisense в самом Foo.js?

avatar
awgv
3 августа 2020 в 19:20
480
2
7

Настройка представляет собой «Создать приложение React» со следующим jsconfig.json:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "baseUrl": "src"
  },
  "include": ["src"]
}

Структура каталогов:

.
└── src
    └── Components
        └── Foo
            ├── Bar
            │   ├── Bar.js
            │   ├── Bar.d.ts
            │   └── index.js
            ├── Foo.js
            └── index.js

// React component `Foo` imports a component `Bar`:

import { Bar } from './Bar'

export function Foo(props) {
  //
}

// And gets full intellisense via `Bar.d.ts`:

type Props = {
  /** ... */
}

export declare function Bar(
  props: Props
): React.FunctionComponent

Но Bar.js сам не получает intellisense из собственного файла Bar.d.ts, можно ли это исправить? Я попробовал директиву с тройной косой чертой (/// <reference path="Bar.d.ts"/>), но это не помогло. Некоторые JSDoc помогли, но довольно бессмысленно иметь специальный файл объявлений и по-прежнему использовать JSDoc; также, вероятно, работает только с VSCode, что нежелательно:

export function Bar(
  // When `type Props` is exported from the `.d.ts`:
  /** @type {import("./Bar").Props} */ props
) {
Источник
Jhecht
6 августа 2020 в 03:45
0

VSCode также позволяет вам использовать JSDoc для получения подсказок по типам — я довольно активно использую его только в проектах JS, хотя я заявлю, что если вы хотите использовать файлы определения TS, почему бы просто не использовать TS полностью?

awgv
6 августа 2020 в 09:20
0

@Jhecht Я начал с JSDoc - не помню, какие проблемы с интеллектом у меня были с ним (было довольно давно), но именно поэтому я перешел к описанию фигур с файлами объявлений, что в итоге сработало для меня лучше, чем JSDoc. Не хочу беспокоить вас деталями, но было очень сложно полностью использовать TypeScript для проекта, так как это добавило бы еще один уровень сложности, с которым я не был готов иметь дело.

Ответы (2)

avatar
awgv
4 сентября 2020 в 01:15
2

По состоянию на сентябрь 2020 г. предполагается (источник):

[...] нет поддерживаемого сценария для ".d.ts является дополнением к .js". Здесь рекомендуется использовать JS Doc для написания аннотаций типов.

Следите за развитием TypeScript, чтобы увидеть, изменится ли он в будущем.

avatar
Kumar Sidharth
11 августа 2020 в 15:57
-2

Вы можете использовать JSDoc для определения классов, функций и прочего так же, как в машинописном тексте.

Одно из лучших применений, которое я сделал, было в файле connect.js на Github. Я не хотел фиксировать файл, содержащий учетные данные БД. Итак, я определил класс, перечисление и т.д. в JSDoc.