6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2022年4月14日 りあクト! 第4章 型定義ファイルはどのように探索されるか(p.215~)

npmのパッケージに含まれている型定義ファイルをプロジェクトに関連付ける方法は大きく分けて2つあります。 1. JavaScriptファイルと同じ階層に同じ名前で.d.ts拡張子の型定義ファイルを置く 例を挙げる『ky』というライブラリは、パッケージ内で同じ階層…

2022年4月12日 りあクト! 第4章 JavaScriptモジュールを TypeScript から読み込む(p.212~)

JavaScript モジュールを TypeScript から読み込む npmのリポジトリで提供されている多くのパッケージは、TypeScriptで書かれているものでも、TypeScriptのままで配布されているものはあまりありません。 (理由は以下) JavaScript環境との相互運用が簡単であ…

2022年4月11日 りあクト! 第4章 モジュールと型定義 TypeScript のインポート/エクスポート (p.207~)

TypeScriptのimport/export JavaScriptとほぼ同じで異なる点は2つあります。 TypeScriptのimportは拡張子を書くとエラーになる 同名の型を扱った場合の挙動 importで拡張子を書くとエラーになる理由 モジュールを解決する際に独自のルールで探索するからで…

2022年4月9日 りあクト! 第4章 型アサーションと型ガード asによる型アサーション (p.203~)

復習 in演算子は、指定したオブジェクト上に指定したプロパティがあるかを判定できます。 "プロパティ名" in オブジェクト; // true or false 型アサーション 型を断定するものです。as 断定する型とします。 コンパイラによる型の解釈を変えているだけで、…

2022年4月8日 りあクト! 第4章 型アサーションと型ガード 型ガードでスマートに型安全を保証する (p.203~)

型ガード if文の条件式などで型を判定して、スコープ内で型を保証することを型ガードと言います。 typeofやinstanceofを用いて型ガードを行う例を紹介します。 typeofによる型ガード const foo: unknown = '1,2,3,4'; if (typeof foo === 'string') { consol…

2022年4月7日 りあクト! 第4章 型アサーションと型ガード asによる型アサーション (p.201~)

型アサーションとは 開発者が型を断定することを、型アサーションと言います。型を断定することによって、コンパイラによる型チェックを強引に通すことができます。しかし、断定した型でコードが実行されるので、メソッドが呼び出せない等、予期せぬエラーが…

2022年4月5日 りあクト! 第4章 TypeScriptで型をご安全に 4-5 組み込みユーティリティ型(p.195~)

続: 組み込みユーティリティ型 NonNullableは型引数に渡した型からnull undefinedを取り除いてくれます。 NonNullable<T> type T1 = NonNullable<string | number | undefined>; type T2 = NonNullable<number[] | null | undefined>; const str:T1 = undefined; //compileerror! const arr:T2 = null; // compile error! R</number[]></string></t>…

2022年4月4日 りあクト! 第4章 TypeScriptで型をご安全に 4-5 条件付き型とテンプレートリテラル型(p.191~)

テンプレートリテラル型 TypeScriptでは、テンプレートリテラルを型定義として扱うことが出来ます。 type DateFormat = `${number}-${number}-${number}`; const date1: DateFormat = '2020-12-05'; const date2: DateFormat = 'Dec.5,2020'; // compile err…

2022年4月2日 りあクト! 第4章 TypeScriptで型をご安全に 4-5 条件付き型とテンプレートリテラル型(p.190~)

extends クラスやインターフェースの拡張に使われるextendsキーワードは型引数の表現にも使うことが出来ます。 const override = <T, U extends T>(obj1: T, obj2: U): T & U => ({ ...obj1, ...obj2, }); override({a: 1}, {a: 2, b: 8}); // { a: 2, b: 8 } override({a: 2</t,>…

2022年4月1日 りあクト! 第4章 TypeScriptで型をご安全に 4-5 さらに高度な型表現(p.186~)

keyof演算子 通常の式では使えず、型コンテキストのみで用いられる演算子です。オブジェクトの各キーを列挙した共用体型になります。 const permissions = { r: 0b0100, w: 0b010, x: 0b001, }; // typeof permissionsで、オブジェクトの型が取得できます。 …

2022年3月31日 りあクト! 第4章 TypeScriptで型をご安全に 4-5 さらに高度な型表現(p.186~)

typeof演算子 console.log(typeof 100); //'number' const arr = [1, 2, 3]; console.log(typeof arr); //'object' type NumArr = typeof arr; const val: NumArr = [4, 5, 6]; const val2:NumArr=['foo','bar','baz']; 変数arrに[1, 2, 3]を代入(ここで型推…

2022年3月29日 りあクト! 第4章 TypeScriptで型をご安全に(p.183~)

型のNull安全性を保証する TypeSctriptはデフォルトの設定では全ての型にnullとundefinedを代入出来てしまいます。 これではnull安全性が保証されず、静的型付け言語を使っているのに実行エラーが頻発しかねません。 厳密にnullやundefindと他の型を厳密に区…

2022年3月28日 りあクト! 第4章 TypeScriptで型をご安全に(p.177~)

型エイリアス VS インターフェース 型エイリアスの場合 type Yuno = 'Yui'; type Yuno = 'Yano'; // エラーになります。 インターフェースの場合 interface Yuno { Yui: string; } interface Yuno { Yano: string; } 型エイリアスとインターフェースの違いを…

2022年3月26日 りあクト! 第4章 TypeScriptで型をご安全に(p.174~)

クラスの2つの顔 TypeScriptには、クラスの型を抽象化して定義する方法が2つあります。 abstract修飾子を用いて抽象クラスを定義する方法 インターフェースを使用する方法 abstract修飾子 abstractは抽象クラスを定義する修飾子です。 抽象クラスとは、そ…

2022年3月25日 りあクト! 第4章 TypeScriptで型をご安全に(p.171~)

アクセス修飾子 アクセス修飾子をプロパティの宣言時につけるとそのプロパティがどこからどこまでアクセスできるのかを指定できます。 アクセス修飾子を何も指定しない場合は、暗黙的にpublicとなります。 アクセス修飾子 内容 public 自クラス、子クラス、…

2022年3月24日 りあクト! 第4章 TypeScriptで型をご安全に(p.169~)

関数の型宣言にジェネリクスを用いる記法 const toArray = <T>(arg: T, arg2: T): T[] => [arg1, arg2]; toArray(8, 3); 第一引数の実引数が型推論されてTがnumber型になります。 このTは型引数(Type Prameter)でありアルファベットは何を使用しても構いません</t>…

2022年3月22日 りあクト! 第4章 TypeScriptで型をご安全に(p.162~168)

タプル型 タプル型とは タプル型とは、配列内の要素の型と、その順番や個数があらかじめ指定できる特殊な配列の型です。要素の型は、それぞれの要素ごとに決めることが出来ます。 レストパラメーターを使うと、いくつでも引数を受け取ることができるようにな…

2022年3月21日 りあクト! 第4章 TypeScriptで型をご安全に(p.149~162)

4-1. TypeScript はイケイケの人気言語? TypeScriptは、AltJS (JS) の代替言語。最終的にコンパイラによってJSのコードに変換されます)の1つです。Alternative JavaScriptの略で別のJavaScriptという意味になります。 GitHut というサイトでは、最新の2020…

2022年3月19日 [ES2015] ECMAScript (JavaScript Primer)

第一章の最後の章では、ECMAScriptの仕様についてまとめられていました。 この章ではリテラシーの向上と、それを高める手段を知れたという印象です。 ECMAScriptはEcma Internationalという団体によって標準化されている仕様です。 Microsoft、Mozilla、Goog…

2022年3月18日 [ES2015] ECMAScriptモジュール (JavaScript Primer)

[ES2015] ECMAScriptモジュール ECMAScriptモジュールはTodoアプリのユースケースで実際に動かしながら学ぶため、ここでは構文の説明とモジュールのイメージをつかむのが目的です。 モジュールは、保守性・名前空間・再利用性で使われます。 保守性: 依存性…

2022年3月17日 Math (JavaScript Primer)

Mathオブジェクト JavaScriptで数学的な定数と関数を提供するビルトインオブジェクトです。 インスタンスは作成しないです。 new Math(); 結果: TypeError: Math is not a constructor const rad90 = Math.PI * 90 / 180; const sin90 = Math.sin(rad90); co…

2022年3月16日 Date (JavaScript Primer)

復習 オプショナルチェーン演算子とは 以下の二つのコードが同義です。 obj?.value obj != null ? obj.value : undefined レシーバがnull undefined のときにエラーではなくundefined を返します。 三項演算子で書くよりもリファクタリングができます。 Date…

2022年3月15日 JSON (JavaScript Primer)JSONにシリアライズできないオブジェクト

JSONにシリアライズできないオブジェクト JSON.stringifyメソッドはJSONで表現可能な値だけをシリアライズします。 (※シリアライズとは、複数の要素を一列に並べる操作や処理のこと。) JSONに変換可能な値として紹介されている、文字列、数値、真偽値、配列…

2022年3月14日 JSON (JavaScript Primer)

JSON JavaScript Object Notationの略です。 JSONは、データ送信に用いる文字列フォーマットです。 JavaScriptのオブジェクトリテラルをベースに作られた軽量なデータフォーマットです。 Notation(ノーテーション)は表記という意味です。 オブジェクトリテラ…

2022年3月12日 [番外編]技術的な雑談でリテラシーを高めた

API・ソフトウェアについて Application Programming Interfaceの略です。 ソフトウェアの機能を共有できる仕組みのこと。 ソフトウェアとは1・・・コンピュータのうち蹴っ飛ばせない部分 ソフトウェアとは2・・・ソフトやファイルなど人間様の手では触れ…

2022年3月11日 [ES2015] Map/Set - Set (JavaScript Primer) 値の追加と取り出し

値の追加と取り出し 作成したセットに値を追加するにはaddメソッドを使います。 重複する値は持たないので、既存の値にaddメソッドを使っても無視されます。 セットが特定の値を持っているかの真偽値を得るのにhasメソッドがあります。 const set = new Set(…

2022年3月10日 [ES2015] Map/Set - Set (JavaScript Primer)

復習 WeakMapの認識が甘かった箇所 Mapと違いキーには参照型のオブジェクトのみ使用できるためプリミティブ型だとエラーになります。 ラッパーオブジェクト プリミティブ型に対してプロパティを呼び出すタイミングで働きます。 Set Setはセット型のコレクシ…

2022年3月8日 [ES2015] Map/Set - WeakMap (JavaScript Primer) WeakMap

WeakMap WeakMapは、Mapと同じくマップを扱うためのビルトインオブジェクトです。 Mapと違う点は、キーを弱い参照(Weak Reference)で持つことです。 弱い参照とは ガベージコレクションによるオブジェクトの解放を妨げない特殊な性質です。 メモリ管理の仕…

2022年3月7日 [ES2015] Map/Set - マップとしてのObjectとMap (JavaScript Primer) マップとしてのObjectの利点

マップとしてのObjectの利点 Objectをマップとして使うときに起きる多くの問題は、Mapオブジェクトを使うことで解決しますが、 常にMapがObjectの代わりになるわけではありません。 マップとしてのObjectには次のような利点があります。 多くの場合はMapオブ…

2022年3月5日 [ES2015] Map/Set - マップとしてのObjectとMap (JavaScript Primer)

ES2015でMapが導入されるまで、JavaScriptにおいてマップ型を実現するためにObjectが利用されてきました。 ただし、"マップとしてのObject"にはいくつかの問題があります。 Objectのprototypeオブジェクトから継承されたプロパティによって、意図しないマッ…