TypeScriptの勉強(undefined型について)
AWS CDKの為のTypeScriptの勉強(undefined型について)
はじめに
インフラエンジニアの私がAWS CDKの為の勉強の為の備忘録です。特にundefined型について勉強しました。
TypeScriptでのオブジェクトの型定義
TypeScriptでは、オブジェクトの形状やプロパティの型を明示的に定義することができます。以下の例を考えてみましょう。
let user: { name: string, age: number | undefined, married?: boolean };
この型定義では、user
という名前のオブジェクトが以下のプロパティを持つことを示しています。
-
name
: 必須のstring
型。 -
age
:number
またはundefined
の型。このプロパティは明示的に設定されなくても良い。 -
married
:boolean
型。しかし、このプロパティには?
が付いているため、オプショナル(つまり必須ではない)です。
undefined
について
JavaScriptとTypeScriptの両方で、undefined
は変数やプロパティが値を持たない状態を示す特別な値です。TypeScriptでは、このundefined
も明示的な型として扱うことができます。
例:
user = { name: '山田 太郎', age: undefined, married: false };
この場合、age
プロパティにはundefined
が明示的に割り当てられています。
オプショナルなプロパティ
married
のようなオプショナルなプロパティは、オブジェクトに存在してもしなくても良いという特性を持っています。
例:
user = { name: '山田 太郎', age: 25 };
この場合、married
プロパティは省略されていますが、型定義に従っているのでエラーは発生しません。また、オプショナルなプロパティがオブジェクトに存在しない場合、その値はundefined
になります。
undefined
と null
の違いと使用シナリオ
TypeScript: TypeScriptにおけるundefined
とnull
は、JavaScriptから引き継がれた2つの異なる"存在しない"を表す値です。しかし、これらは異なる文脈やセマンティクスで使用されるため、正確に理解して適切に使用することが重要です。今回は、これらの違いと、TypeScriptでの使用シナリオを解説します。
undefined
1. TypeScriptでは、オブジェクトのオプショナルなプロパティや初期値が設定されていない変数にはundefined
がデフォルトで返されます。これは、変数がまだ値を持っていない、またはオブジェクトのプロパティがオプショナルで設定されていないことを示します。
interface Person {
name: string;
age?: number; // This can be either a number or undefined.
}
const john: Person = { name: "John" };
console.log(john.age); // Outputs: undefined
null
2. 一方、null
は何も存在しないこと、あるいは値が意図的に空であることを示したい場合に使用します。たとえば、データベースから情報を検索する関数が、該当する情報が存在しない場合にはnull
を返すというシナリオが考えられます。
function findPerson(id: string): Person | null {
// If a person with the given ID is not found, return null.
return null;
}
3. 厳密なnullチェック
TypeScriptのstrictNullChecks
オプションを有効にすると、変数にnull
やundefined
を割り当てることができるのは、それらの型が明示的に指定されている場合だけになります。この設定は、意図しないnullやundefinedの代入を予防し、安全なコードを記述するための強力なツールとなります。
まとめ
TypeScriptは、JavaScriptの動的な性質を持ちながら、型の安全性を提供する強力なツールです。この記事の例を通じて、オブジェクトの型定義の基本や、undefined
とオプショナルなプロパティの振る舞いについて学びました。
ブラウザで検証可能
TypeScript: JavaScript With Syntax For Types.
参考
実践 AWS CDK - TypeScript でインフラもアプリも! - Silverworks - BOOTH
Discussion