オプショナルチェーン(?.)を使用すれば、簡潔にコードを記載することができます。
この記事ではオプショナルチェーンの使用方法やメリット、注意点などを記載します。
環境
- typescript: 4.2.4
オプショナルチェーンとは
オブジェクトのプロパティにアクセスする際、そのプロパティが存在しない場合でもエラーが発生せずに安全に処理を続けることができます。
通常は存在しないプロパティにアクセスした場合にエラーが発生します。
しかし、オプショナルチェーンを使うことで存在しないプロパティにアクセスしてもエラーが発生せず、undefinedが返されるようになります。
参考: オプショナルチェーン
実際の使用例
サンプルコード
以下が、オプショナルチェーンを使ったサンプルコードです。
interface IName {
firstName: string;
lastName: string;
}
const userNameObj: { [key: string]: IName } = {
userA: { firstName: 'taro', lastName: 'yamada' },
};
const aFirstName = userNameObj.userA?.firstName;
const bFirstName = userNameObj.userB?.firstName;
console.log(aFirstName); // taro
console.log(bFirstName); // undefined
aFirstName
は存在するプロパティにアクセスし値が取得できています。
それに対して、bFirstName
は存在しないプロパティにアクセスしているものの、エラーにはならずundefinedが返されていることが分かります。
メリット
コードを短縮することが可能です。
オプショナルチェーンを使用しない場合の書き方が、以下になります。
const aFirstName = userNameObj.userA && userNameObj.userA.firstName;
const bFirstName = userNameObj.userB && userNameObj.userB.firstName;
オプショナルチェーンを使用しない場合、firstName
にアクセスする前にその上位のプロパティであるuserA
,userB
の存在を確認する必要があります。
オプショナルチェーンを使用すると、簡潔に記載できることが分かったかと思います。
注意点
左辺には適用できない
値を代入する際の左辺でオプショナルチェーンを使用することはできません。
interface IName {
firstName: string;
lastName: string;
}
const userNameObj: { [key: string]: IName } = {
userA: { firstName: 'taro', lastName: 'yamada' },
};
userNameObj.userB?.firstName = 'takashi'; // The left-hand side of an assignment expression may not be an optional property access.
まとめ
TypeScriptでのオプショナルチェーンの使用方法に関して、記載しました。
使用しない場合に比べて、簡潔に書くことができるので是非使用してみてください!
コメント