Как использовать/импортировать файлы объявлений TypeScript в JavaScript?

Я немного играю с Kotlin Multiplatform.

Прямо сейчас я пытаюсь разработать библиотеку Kotlin JS, чтобы импортировать и использовать ее во внешнем проекте JavaScript. Пока это работает нормально. Kotlin создает файлы JavaScript из кода Kotlin, я могу импортировать и использовать их в проекте JavaScript, и он делает то, что должен.

Но моя IDE показывает, что есть неразрешенная функция или метод:

Я новичок в JavaScript, и мне было интересно узнать об этом предупреждении, потому что оно работает.

Итак, я искал и нашел это:

Компилятор Kotlin/JS IR способен генерировать определения TypeScript из кода Kotlin. Эти определения могут использоваться инструментами JavaScript и IDE при работе с гибридными приложениями для обеспечения автозаполнения, поддержки статических анализаторов и упрощения включения кода Kotlin в проекты JavaScript и TypeScript. https://kotlinlang.org/docs/reference/js-ir-compiler.html#preview-generation-of-typescript-declaration-files-dts

Я предполагаю, что мне нужны эти определения TypeScript, чтобы сообщить моей IDE, что этот метод существует.

Через несколько часов я узнал, как сообщить компилятору Kotlin(?) сгенерировать это определение, но предупреждение все еще там :-(

Сгенерированный файл shared.d.ts выглядит так:

type Nullable<T> = T | null | undefined
export namespace api.model {
    class AuthResponse {
        // lots of code
    }
}
export namespace api {
    function requestToken(): kotlin.js.Promise<api.model.AuthResponse>;
}
export as namespace shared;

Это сгенерированный package.json файл:

{
  "main": "kotlin/shared.js",
  "devDependencies": {
    "webpack": "4.44.1",
    "webpack-cli": "3.3.12",
    "source-map-loader": "1.0.1",
    "dukat": "0.5.8-rc.3"
  },
  "dependencies": {
    // kotlin related imports
  },
  "peerDependencies": {},
  "optionalDependencies": {},
  "bundledDependencies": [],
  "name": "shared",
  "version": "1.0.0"
}

В проекте JavaScript я добавил эту строку в файл package.json"shared": "file:..<path to the other package.json file>".

Я также нашел этот вопрос Как использовать файлы объявлений TypeScript вместе с JavaScript, но, возможно, я не могу следовать ответу или это не решает мою проблему.

Есть ли способ сообщить IDE, что этот метод существует? Должен ли этот файл объявления TypeScript решить эту проблему? И если да, то как мне его использовать/импортировать?

сгенерированный shared.d.ts файл находится рядом с сгенерированным shared.js файлом

Ralph Bergmann 13.12.2020 05:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
2 156
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проще говоря, файлы объявлений машинописного текста используются для того, чтобы машинописный текст мог понимать JS. А не наоборот. Файл .d.ts полезен только в проекте TypeScript, который позволяет TypeScript делать вывод о типах в модуле JavaScript.

Если вы хотите устранить предупреждение, импортируйте файл shared.js в свой проект JS.

Я импортировал его с помощью import { api } from 'shared';, но предупреждение все еще там

Ralph Bergmann 13.12.2020 14:36
Ответ принят как подходящий

Следующее работает по крайней мере для IntelliJ IDEA Ultimate:

Добавление "@types/shared": "file:../blh_shared/build/js/packages/shared" в файл package.json моего проекта React добавляет завершение кода в мою IDE.

Теперь файл package.json выглядит так:

{
  "name": "react_app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "shared": "file:../blh_shared/build/js/packages/shared",
  },
  "devDependencies": {
    "@types/shared": "file:../blh_shared/build/js/packages/shared",
  }
}

Другие вопросы по теме