Я немного играю с 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 решить эту проблему? И если да, то как мне его использовать/импортировать?
Проще говоря, файлы объявлений машинописного текста используются для того, чтобы машинописный текст мог понимать JS. А не наоборот. Файл .d.ts
полезен только в проекте TypeScript, который позволяет TypeScript делать вывод о типах в модуле JavaScript.
Если вы хотите устранить предупреждение, импортируйте файл shared.js
в свой проект JS.
Я импортировал его с помощью import { api } from 'shared';
, но предупреждение все еще там
Следующее работает по крайней мере для 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",
}
}
сгенерированный
shared.d.ts
файл находится рядом с сгенерированнымshared.js
файлом