As F# is build on top of the CLR and has access to the same Base Class Library you can use String.Format as you know from C#.
A (better) alternative is the printf function in F#. Be aware that the printf function(and its relatives) are not using the composite formatting technique we see in String.Format but use a C-style technique instead.
This means that you don’t use positional placeholders like this:
String.Format("A string: {0}. An int: {1}. A float: {2}. A bool: {3}","hello",42,3.14,true)
Instead you use C-style format strings representing the data types(e.g. %s for string):
printfn "A string: %s. An int: %i. A float: %f. A bool: %b" "hello" 42 3.14 true
What makes this approach really nice is that it adds an extra layer of type safety on top of your string format. If you expect a string parameter but provide an integer, you’ll get a nice compiler error.
But maybe you are wondering; what about string interpolation, a nice feature added to C# 6? Unfortunately this doesn’t exist (yet) in F# although a Language Specification is available(https://github.com/fsharp/fslang-design/blob/master/RFCs/FS-1001-StringInterpolation.md)
More information: https://fsharpforfunandprofit.com/posts/printf/