Как использовать определения Typescript, чтобы получить Intellisense для моих собственных служб Javascript в VS Code?

Я занимаюсь разработкой внутреннего сервера с использованием SailsJS. Он в основном внедряет все вспомогательные службы моделей, а также мои собственные службы в глобальное пространство имен. Мне было бы очень полезно, если бы я мог получить Intellisense для этих услуг.

Я сначала настроилтипизации и установил глобальные определения типов для lodash и node. Это работает как шарм после созданияjsconfig.json а такжеtsconfig.json файлы.

Затем я хотел создать файл базовых определений для своих собственных сервисов. Я создал каталог втипизации / Глобал сindex.d.ts файл в нем:

declare namespace foo {
    export function bar();
}
declare var baz: { some: number };

Это просто для того, чтобы не тратить время на написание определений, если они не будут работать.

Далее я включил этоindex.d.ts файл втипизации / index.d.ts добавив ссылочный тег:

/// <reference path="globals/psiewakacje/index.d.ts" />

К моему удивлению, это не работает в файлах Javascript моего проекта. После вводаfoo. или жеbaz. Я не получаю никакого разумного Intellisense.

 

Единственная поддержка Intellisense, которую я смог получить, была, когда я импортировал эти сервисы в каждый файл через:

import * as InternalParser from '../services/InternalParser';

или же

var InternalParser = require('../services/InternalParser');

но это не использует файлы определения Typescript и просто дает мне экспортированные свойства. В целом нежелательный результат.

 

Интересно, как заставить его работать правильно. Я посмотрел на файлы определения типов узлов и lodash, и они делают то же самое: объявляют переменную / пространство имен с определенным типом. Однако их определения работают в Javascript, а мои - нет. Как сделать это правильно?

 Telokis31 авг. 2018 г., 11:09
Если кто-то случайно наткнется на этот вопрос, идеальный ответ здесь:stackoverflow.com/questions/46678663/...
 Akash Kava30 авг. 2018 г., 23:21
Вы пытались включить свой.d.ts внутри вашего package.json?
 bryanmac28 авг. 2018 г., 05:13

Ответы на вопрос(3)

tsconfig.json файл без"allowJs": "true" опция компилятора. Если вы хотите, чтобы ваши файлы TypeScript и JavaScript рассматривались как один проект, вы должны иметьtsconfig.json файл с"allowJs": "true" и нетjsconfig.json файл.

 Matt McCutchen28 авг. 2018 г., 18:02
Смотрите мой рабочий пример проекта наgithub.com/mattmccutchen/stackoverflow-38370549 .
 Telokis31 авг. 2018 г., 11:14
Не могли бы вы немного улучшить свой ответ? Как с точки зрения форматирования, так и полноты? Это немного сырой, как есть.
 Matt McCutchen28 авг. 2018 г., 15:21
Да. Для типов, зависящих от импортируемого файла, ваш.d.ts файл должен быть либо рядом с вашим.js файл или практически рядом с ним на основеrootDirs опция компилятора. Если вам нужна дополнительная помощь, отвечающая требованиям, не описанным в первоначальном вопросе, отправьте новый вопрос.
 Telokis28 авг. 2018 г., 17:08
Это не работает для меня. Я попытался воссоздать исходный вопрос и применить ваше предложение, но у меня больше нет смысла.
 Telokis31 авг. 2018 г., 11:13
Я нашел абсолютный идеальный ответВот, И это не требует, чтобы я использовал файл tsconfig вместо jsconfig.
 Telokis28 авг. 2018 г., 10:22
Итак, если я поменяюjsconfig.json подать вtsconfig.json файл с"allowJs": trueЯ смогу кодировать в JSа также определить пользовательские наборы для моих файлов JS? Вы можете взглянуть наэтот комментарий чтобы получить подробное объяснение того, чего я пытаюсь достичь.

и я обнаружил, что редактор (VSCode) искал файл в неправильном каталоге, проблема была решена путем относительной ссылки на правильный путь, конкретный путь будет отличаться, но в моем примере это было:

/// <reference path="../../typings/index.d.ts" />

index.d.ts содержит следующее:

/// <reference path="globals/core-js/index.d.ts" />
/// <reference path="globals/jasmine/index.d.ts" />
/// <reference path="globals/node/index.d.ts" />

и моя структура каталогов / файлов выглядит следующим образом:

 Joelster05 сент. 2016 г., 16:10
Ну понял! Я дам вам знать, если я найду что-нибудь еще, что может помочь.
 Voreny05 сент. 2016 г., 16:05
Для меня проблема не в том, чтобы получить Intellisense для пользовательских модулей, а не в тех, которые установлены с типизацией, поэтому, к сожалению, это не решение для меня. Спасибо за попытку, хотя!

typings/index.d.ts, Проще всего было бы просто добавить ваши декларации в файл глобальных деклараций в любом месте вашего проекта.

Далее вместо использованияvar а такжеnamespace, просто используйтеinterface.

Например. в корень вашего каталога, вы можете легко добавить

// index.d.ts
interface Foo {
  bar: () => void
}

interface Baz { some: number }
 Telokis28 авг. 2018 г., 10:18
Это не работает После ввода именно этого кода внутриtypings/index.d.ts файл, я не получаю автозаполнение при вводеFo затем Ctrl + Пробел. Более того, я бы хотел, чтобы эти типы не были глобальными, а зависели от импортируемого файла. Например, я хотел бы иметьtypings/Foo.d.ts что используется, когда я включаюsrc/models/Foo.js где-то. Это вообще возможно?

Ваш ответ на вопрос