Ran
05/18/2022, 8:16 AMval jsMain by getting {
dependencies {
implementation(npm("bignumber.js", "9.0.2"))
}
}
Declaration:
@JsModule("bignumber.js")
@JsNonModule
external class BigNumber(raw: String) {
companion object {
var ROUND_UP: Number /* 0 */
var ROUND_DOWN: Number /* 1 */
var ROUND_CEIL: Number /* 2 */
var ROUND_FLOOR: Number /* 3 */
var ROUND_HALF_UP: Number /* 4 */
var ROUND_HALF_DOWN: Number /* 5 */
var ROUND_HALF_EVEN: Number /* 6 */
var ROUND_HALF_CEIL: Number /* 7 */
var ROUND_HALF_FLOOR: Number /* 8 */
fun config(): Config
fun set(obj: Config): Config
fun clone(obj: Config = definedExternally): Any
}
interface Config {
var DECIMAL_PLACES: Number?
get() = definedExternally
set(value) = definedExternally
var ROUNDING_MODE: Number? /* 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 */
get() = definedExternally
set(value) = definedExternally
var EXPONENTIAL_AT: dynamic /* Number? | JsTuple<Number, Number> */
get() = definedExternally
set(value) = definedExternally
var RANGE: dynamic /* Number? | JsTuple<Number, Number> */
get() = definedExternally
set(value) = definedExternally
var CRYPTO: Boolean?
get() = definedExternally
set(value) = definedExternally
var MODULO_MODE: Number? /* 0 | 1 | 3 | 6 | 9 */
get() = definedExternally
set(value) = definedExternally
var POW_PRECISION: Number?
get() = definedExternally
set(value) = definedExternally
var FORMAT: Format?
get() = definedExternally
set(value) = definedExternally
var ALPHABET: String?
get() = definedExternally
set(value) = definedExternally
}
interface Format {
var prefix: String?
get() = definedExternally
set(value) = definedExternally
var decimalSeparator: String?
get() = definedExternally
set(value) = definedExternally
var groupSeparator: String?
get() = definedExternally
set(value) = definedExternally
var groupSize: Number?
get() = definedExternally
set(value) = definedExternally
var secondaryGroupSize: Number?
get() = definedExternally
set(value) = definedExternally
var fractionGroupSeparator: String?
get() = definedExternally
set(value) = definedExternally
var fractionGroupSize: Number?
get() = definedExternally
set(value) = definedExternally
var suffix: String?
get() = definedExternally
set(value) = definedExternally
}
fun plus(number: BigNumber): BigNumber
fun minus(number: BigNumber): BigNumber
fun multipliedBy(number: BigNumber): BigNumber
fun dividedBy(number: BigNumber): BigNumber
fun modulo(number: BigNumber): BigNumber
fun comparedTo(number: BigNumber): Number?
fun toString(base: Int): String
}
Other methods work well except set
and clone
.
@Test
fun testConfig() {
println(BigNumber.config().DECIMAL_PLACES)
BigNumber.set(object : BigNumber.Config {
override var DECIMAL_PLACES: Number? = 3
})
println(BigNumber.config().DECIMAL_PLACES)
}
the set
method has no effect. The output is like the following:
> Task :jsBrowserTest
[log] 20
[log] 20
Is there anyone can tell me why the set
method doesn't work and how can I use clone
method?Big Chungus
05/18/2022, 8:42 AMRan
05/18/2022, 8:44 AMRan
05/18/2022, 8:44 AMBig Chungus
05/18/2022, 8:50 AMset
is declared as staticRan
05/18/2022, 8:53 AMset
method in companion object
, is it wrong?Big Chungus
05/18/2022, 8:53 AMBigNumber.set(object : BigNumber.Config {
override var DECIMAL_PLACES: Number? = 3
})
Try constructing Config
via js api
js("{}").unsafeCast<Config>().apply {
...
}
Ran
05/18/2022, 8:58 AMRan
05/18/2022, 9:00 AMclone
method will return a new constructor to create BigNumber with specific BigNumber. In Kotlin, how can I use clone
?Big Chungus
05/18/2022, 9:03 AMfun clone(obj: Config = definedExternally): dynamic
is the easies way around. To make it typesafe you could try
fun clone(obj: Config = definedExternally): (BugNumber.Value, Number?) -> BigNumber
Note how you miss out on being able to specify constructor arg names and default values. Unfortunatelly this is not supported in lambda type declarationsRan
05/18/2022, 9:04 AM