[解決済み】引数として渡されたTypeScriptオブジェクトにデフォルト値を設定する
2022-03-31 21:46:10
質問
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';
}
解決方法は?
実は、現在、簡単な方法があるようです。以下のコードは、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();
関連
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] オブジェクトのキーと値に*ngForでアクセスする
-
[解決済み] JSONオブジェクトをTypeScriptのクラスにキャストする方法を教えてください。
-
[解決済み] Typescript オブジェクトのインデックス付きメンバの型を強制する?
-
[解決済み] TypeScriptのオブジェクトリテラルでの型定義
-
[解決済み] TypeScriptでインターフェースファイルの定義に基づいたオブジェクトを作成するには?
-
[解決済み] Typescriptエクスポートとデフォルトエクスポートの比較
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】シェルスクリプトに渡された最後の引数を取得する
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Typescript : require文はimport文の一部ではない
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] Angular 2の@ViewChildアノテーションがundefinedを返す
-
[解決済み] TypeScriptのsetTimeoutはどのような戻り値型を使用すればよいですか?
-
[解決済み] Jestで関数をモックする方法
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】「エラー TS2533: オブジェクトは 'null' または 'undefined' の可能性があります」を抑制する方法とは?
-
[解決済み】TypeScriptの関数のオーバーローディング
-
[解決済み】TypeScriptとフィールドイニシャライザー
-
[解決済み】TypescriptのArray<Type> VS Type[]について