引数として渡されたTypeScriptオブジェクトのデフォルト値を設定する 質問する

引数として渡されたTypeScriptオブジェクトのデフォルト値を設定する 質問する
function sayName(params: {firstName: string; lastName?: string}) {
    params.lastName = params.lastName || 'smith';  // <<-- any better alternative to this?
    var name = params.firstName + params.lastName
    alert(name);
}

sayName({firstName: 'bob'});

私は次のようなものが機能するかもしれないと想像していました:

function sayName(params: {firstName: string; lastName: string = 'smith'}) {

明らかに、これらが単純な引数であれば、次のように実行できます。

function sayName(firstName: string, lastName = 'smith') {
    var name = firstName + lastName;
    alert(name);
}

sayName('bob');

また、CoffeeScript では条件付き存在演算子にアクセスできるので、次の操作を実行できます。

param.lastName ?= 'smith'

これは次の JavaScript にコンパイルされます:

if (param.lastName == null) {
    param.lastName = 'smith';
}

ベストアンサー1

実は、簡単な方法があるようです。次のコードは TypeScript 1.5 で動作します。

function sayName({ first, last = 'Smith' }: {first: string; last?: string }): void {
  const name = first + ' ' + last;
  console.log(name);
}

sayName({ first: 'Bob' });

コツは、最初に引数オブジェクトから選択するキーを括弧で囲み、key=valueデフォルト値を で指定することです。その後に:と型宣言を続けます。

これは、あなたがやろうとしていたこととは少し異なります。なぜなら、完全なparamsオブジェクトではなく、逆参照された変数があるからです。

関数に何かを渡すことをオプションにしたい場合は、型内のすべてのキーに を追加し、型宣言の後に?のデフォルトを追加します。={}

function sayName({first='Bob',last='Smith'}: {first?: string; last?: string}={}){
    var name = first + " " + last;
    alert(name);
}

sayName();

おすすめ記事