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