diff --git a/src/Glutinum.Converter/Transform.fs b/src/Glutinum.Converter/Transform.fs index ec636a4..2bdcab6 100644 --- a/src/Glutinum.Converter/Transform.fs +++ b/src/Glutinum.Converter/Transform.fs @@ -453,6 +453,20 @@ let private transformParameter = let context = context.PushScope(parameter.Name) + let typ = + let computedType = transformType context parameter.Type + + // In TypeScript, if an argument is marked as spread, users is forced to + // use an array. We want to remove the default transformation for that + // array and use the underlying type instead + // By default, an array is transformed to ResizeArray in F# + if parameter.IsSpread then + match computedType with + | FSharpType.ResizeArray underlyingType -> underlyingType + | _ -> computedType + else + computedType + { Attributes = [ @@ -461,7 +475,7 @@ let private transformParameter ] Name = Naming.sanitizeName parameter.Name IsOptional = parameter.IsOptional - Type = transformType context parameter.Type + Type = typ } let private transformAccessor (accessor: GlueAccessor) : FSharpAccessor = diff --git a/tests/specs/references/class/constructorsWithSpread.fsx b/tests/specs/references/class/constructorsWithSpread.fsx index d12d1f0..1de512f 100644 --- a/tests/specs/references/class/constructorsWithSpread.fsx +++ b/tests/specs/references/class/constructorsWithSpread.fsx @@ -9,7 +9,7 @@ type Exports = [] static member Logger () : Logger = nativeOnly [] - static member Logger ([] args: ResizeArray []) : Logger = nativeOnly + static member Logger ([] args: string []) : Logger = nativeOnly [] [] diff --git a/tests/specs/references/class/staticMemberWithReturnLiteralTypeIntersectionAndMultipleProperties.fsx b/tests/specs/references/class/staticMemberWithReturnLiteralTypeIntersectionAndMultipleProperties.fsx index 8f21e33..556a826 100644 --- a/tests/specs/references/class/staticMemberWithReturnLiteralTypeIntersectionAndMultipleProperties.fsx +++ b/tests/specs/references/class/staticMemberWithReturnLiteralTypeIntersectionAndMultipleProperties.fsx @@ -27,7 +27,7 @@ Class.mergeOptions($0)""" emitJsExpr (initHookFn) $$""" import { Class } from "module"; Class.addInitHook($0)""" - static member inline addInitHook (methodName: string, [] args: ResizeArray []): obj = + static member inline addInitHook (methodName: string, [] args: obj []): obj = emitJsExpr (methodName, args) $$""" import { Class } from "module"; Class.addInitHook($0, $1)""" diff --git a/tests/specs/references/functionType/spreadArgument.fsx b/tests/specs/references/functionType/spreadArgument.fsx index 5f805e2..fdcf45d 100644 --- a/tests/specs/references/functionType/spreadArgument.fsx +++ b/tests/specs/references/functionType/spreadArgument.fsx @@ -8,7 +8,7 @@ open System [] type Log = [] - abstract member Invoke: prefix: string * [] args: ResizeArray [] -> obj + abstract member Invoke: prefix: string * [] args: obj [] -> obj (***) #r "nuget: Fable.Core" diff --git a/tests/specs/references/typeLiteral/constructSignature.fsx b/tests/specs/references/typeLiteral/constructSignature.fsx index f3733b1..79df0f8 100644 --- a/tests/specs/references/typeLiteral/constructSignature.fsx +++ b/tests/specs/references/typeLiteral/constructSignature.fsx @@ -8,7 +8,7 @@ open System [] type Test = [] - abstract member Create: [] args: ResizeArray [] -> obj + abstract member Create: [] args: obj [] -> obj (***) #r "nuget: Fable.Core"