JS-скрипт импорта Scala.js выдает ошибку: ожидаемое начало определения

У меня есть JS-скрипт script.js, который содержит класс MyType. Я хотел бы использовать методы класса add() и divide внутри scala-скрипта App.scala.

Используя Scala.js и JSImport, я импортирую script.js в App.scala.

Однако, когда я пытаюсь использовать методы MyTypeadd() и divide внутри скрипта scala, я получаю сообщение об ошибке error: expected start of definition?

Не могли бы вы помочь мне определить проблему?

Заранее спасибо!

скрипт.js:


class MyType {
    constructor(x, y) {

        this.x = x;
        this.y = y;

    }

    add(z){
        let {x,y} = this;
        return x + y + z;
    }

    divide(z){
        let {x,y} = this;
        return (x + y)/z;
    }
};

module.exports = {MyType};

App.скала:


import scala.scalajs.js
import scala.scalajs.js.annotation._

@js.native
@JSImport("./script.js","MyType")

class MyType(var x:Double, var y:Double) extends js.Object

object MyApp {
    @JSExport
    def main(args:Array[String]): Unit = {
        val added = new MyType(1,2).add(3)
        println(s"my $added") // 1

        val divided = new MyType(4,3).divide(2)
        println(s"my $divided") // 6
    }
}

build.scala:

name:="JSImports"
version:="0.1"
scalaVersion:="2.11.12"
enablePlugins(ScalaJSPlugin)
jsDependencies += ProvidedJS/"script.js"
scalaJSUseMainModuleInitializer:=true

Как выглядит ваша конфигурация sbt (или другого инструмента сборки)?

sjrd 23.04.2022 09:24

Только что обновил код, чтобы отразить сборку sbt.

Vakindu 23.04.2022 09:46

Ваша установка мне кажется не очень понятной. Вы используете @JSImport, но ваша сборка, похоже, не настраивает scalaJSLInkerConfig's withModuleKind(...), поэтому при связывании сначала должно появиться сообщение об ошибке, говорящее о том, что вы не включили поддержку модулей. Кроме того, использование jsDependencies для чего-то, что является модулем JS, не будет работать. jsDependencies — устаревшая система, которая работает только со скриптами.

sjrd 23.04.2022 13:05
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
1
3
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка ожидаемое начало определения является результатом ошибки форматирования — между @JSImport и class MyType не может быть пустой строки.

Скорее всего, это связано с тем, что Scala заканчивает операторы/объявления без точки с запятой. Я не знаю точных правил, но пустая строка часто имеет значение.

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