■ はじめに
! とか ? とかの動きがややっこしかったのでメモ。
目次
【0】実行環境 【1】? 1)オプション引数 (optional parameter) 2)オプショナルチェイニング (Optional chaining) '?.' 3)三項演算子 4)Null 合体演算子 (nullish Coalescing) '??' 【2】! 1)非nullアサーション演算子 (Non-null assertion operator)
【0】実行環境
* ブラウザで実行できる
https://www.typescriptlang.org/play
【1】?
1)オプション引数 (optional parameter)
https://typescriptbook.jp/reference/functions/optional-parameters
* 関数の引数が省略可能である => C# のように Nullableを宣言するものではない
サンプル
function sayHello(name?: string) { }
2)オプショナルチェイニング (Optional chaining) '?.'
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining
* 参照が nullish (null または undefined) の場合、 例外が発生せずに、 undefined を返す。
サンプル
type TypeScriptFunctionArgs = { readonly val1: string readonly val2: string } function deploy(args?: TypeScriptFunctionArgs): void { // 「args?.val1」で受ける console.log(`Hello world... ${args?.val1}, ${args?.val2}`) } // "Hello world... xxx, yyy" deploy({ val1: "xxx", val2: "yyy" } as TypeScriptFunctionArgs) // "Hello world... undefined, undefined" deploy()
3)三項演算子
* 詳細は、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2022/03/12/000000
サンプル
// 抜粋 const result = isAws ? 'This is AWS!!' : 'This is not AWS...'
4)Null 合体演算子 (nullish Coalescing) '??'
* 左辺が null または undefined の場合に右の値を返し、それ以外の場合に左の値を返す
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
構文
const <variable> = <value> ?? <default_value>;
サンプル
const nullValue = null; const emptyText = ""; // falsy const someNumber = 42; const valA = nullValue ?? "default for A"; const valB = emptyText ?? "default for B"; const valC = someNumber ?? 0; console.log(valA); // "default for A" console.log(valB); // "" (空文字列は null でも undefined でもないため) console.log(valC); // 42
【2】!
1)非nullアサーション演算子 (Non-null assertion operator)
* Optional Paramaterがnon-nullである(null,undefinedではない) ということをコンパイラに明示する
サンプル
let name = entity!.name
参考文献
https://dev.classmethod.jp/articles/typescript-assertions/
https://qiita.com/zigenin/items/364264a6cf635b962542
https://qiita.com/ryo2132/items/12981f61db21112cb61c
関連記事
TypeScript ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/21/180904
TypeScript ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/02/15/000000
条件分岐
https://dk521123.hatenablog.com/entry/2022/03/12/000000
Rest引数 (可変長引数)
https://dk521123.hatenablog.com/entry/2016/02/08/111250
ループ操作 ~ map etc ~
https://dk521123.hatenablog.com/entry/2021/01/03/000000
配列・リスト操作
https://dk521123.hatenablog.com/entry/2021/02/10/225119
配列・リスト操作 ~ ソート編 ~
https://dk521123.hatenablog.com/entry/2021/02/24/222452
配列・リスト操作 ~ スプレッド構文 / Three-dots ~
https://dk521123.hatenablog.com/entry/2021/03/09/000000
Enum / Union / const assertion
https://dk521123.hatenablog.com/entry/2021/03/17/005906
Visual Studio Code ~ TypeScript ~
https://dk521123.hatenablog.com/entry/2022/03/06/000000
TypeScript ~ クラス / インターフェイス ~
https://dk521123.hatenablog.com/entry/2022/03/13/000000
JavaScript ~ クラス ~
https://dk521123.hatenablog.com/entry/2015/12/12/093900