まずは引数無しのブロックを作ってみます。

function echo () {
basic.showString("hello microbit!")
}
//% color="#000000" icon="\uf1e6" block="引数付き拡張機能"
namespace myExtensionWithArgs {
//% block="echo"
export function echo (): void {
basic.showString("hello microbit!")
}
}
関数の返り値をvoidにすることで、

最初からブロック等のようなイベントブロック(コンテナブロック)に挿入できるブロック(コマンドブロック)になりました。
引数有りのブロックを作ってみます。

function echo (str: string) {
basic.showString(str)
}
//% color="#000000" icon="\uf1e6" block="引数付き拡張機能"
namespace myExtensionWithArgs {
//% block="echo %str"
export function echo (str: string): void {
basic.showString(str)
}
}

echoブロックに引数を追加することで値ブロックが追加された形のコマンドブロックになります。
コマンドブロックに値ブロックを追加する時は、関数の上に挿入しましたコメントで
//% block="echo %str"
のように引数名の頭に%を付けて指定します。