結論
Concurrently
というツールを使ってサクッと並列で実行することができました。
まずはインストール。
$ npm install --save-dev concurrently
あとは下記のようにconcurrently
キーワードで複数の処理を実行できます。
"scripts": { "dev": "concurrently 'tcm --watch src' 'next src/'" }
てな感じで本日も以上となります🍺
Concurrently
というツールを使ってサクッと並列で実行することができました。
まずはインストール。
$ npm install --save-dev concurrently
あとは下記のようにconcurrently
キーワードで複数の処理を実行できます。
"scripts": { "dev": "concurrently 'tcm --watch src' 'next src/'" }
てな感じで本日も以上となります🍺
undefinedを許容した配列型のまま取り除きたい場合は下記のようにシンプルに記述できます。
items .filter(item => item.documentSnapshot !== undefined) // (number | undefined)[]
undefinedを許容しない配列型にしたい場合は、タイプガードを使ってfilter
する必要があります。
items.filter((item): item is number => typeof item == 'string') // number[]
てな感じで本日も以上となります🍺
Functional Componentを実装する際に、下記のように定義するのではなく、
const Ex = (props: Props) => { return ( <div> hoge </div> ) }
React.FC
を使って実装すれば、呼び出しからchildrenプロパティを参照できるようになります。
const Section: React.FC<SectionProps> = props => { return ( <div> hoge </div> ) }
元のオブジェクトに変更を加えることなく、新しいオブジェクトを作成したい場合などに便利です。例えば、下記のようなa
とb
をプロパティに持つオブジェクトにc
を追加する時など。
const hoge1 = {a: 1, b: 2} const hoge2 = {...hoge1, c: 3}
ちなみに、プロパティが同じ場合は、後に追加したプロパティの値で上書きされます。
また、配列では下記のように使用でき、追加した順序で配列が展開されます。
var list = [1, 2]; list = [...list, 3, 4]; console.log(list); // [1,2,3,4]
てな感じで本日も以上となります🍺
最近Webフロントを入門したことで、JavaScriptを勉強する機会が増えたが、ECMAScriptについての理解が曖昧だったので軽くメモ👷♀️
JavaScriptのコードをプログラムとして動作させるには、JavaScriptエンジンでコードをコンパイルして実行させる必要があります。ChromeやSafariを始めとしたブラウザは、それぞれJavaScriptエンジンがあり、これにより同じJavaScriptでもブラウザによって挙動が変わっています。
ちなみに、JavaScriptエンジンには下記のようなものがあります。
エンジン | 内容 |
---|---|
V8 | Googleによって開発されたエンジンで、Chromeなどで使用されている |
SpiderMonkey | Mozillaによって開発されたエンジンで、Firefoxなどで使用されている |
JavaScriptCore | AppleのSafari向けのエンジン |
Chakra | Microsoft Edge向けのエンジン |
Hermes | Facebookが開発したエンジンで、React Native向けに最適化されている |
先ほど紹介したような各JavaScriptエンジンで、JavaScriptのコードがどのように動くかが決まっていなっかたら、それぞれのブラウザごとにJavaScriptを逐次書くようになり大変です。そのようなことが内容に、JavaScriptのコードがどのように動くべきかを決めた仕様書がECMAScript
になります。
ECMAScriptは、JavaScriptエンジンの仕様書なので、時間とともに当然新しくなっていきます。それぞれのバージョンで使えるJavaScriptの構文やブラウザが対応しているECMAScriptのバージョンも異なります。
ちなみに、エンジニアなら誰しも新しいECMAScriptでコードを書きたいと思うでしょう。そんな時に使えるのがbabel
というコンパイラです。babel
はECMAScriptのバージョンの違いを吸収して、新しいECMAScriptを古いバージョンに変えてくれたりします。
てな感じで本日も以上となります🍺
オブジェクトの配列をDictionaryに変換する際に、下記のようにObject.assign
で変換していましたが、もっとスマートな書き方があったのでメモしておきます。
const params = [ { key: 'hoge', value: 'value' }, { key: 'hoge2', value: 'value' } ] const dicParams: { [index: string]: string } = Object.assign( {}, ...params.map(x => ({ [x.key]: x.value })) )
下記のようにObject.fromEntries
関数で、スマートに変換することができました。Object.fromEntries
はキーと値の配列の組み合わせをDictionaryに変換できるメソッドで、今回の場合は、オブジェクトの配列を、キーと値の配列に変換して渡すことで、Object.fromEntries
を使えるようにしています。
const params = [ { key: 'hoge', value: 'value' }, { key: 'hoge2', value: 'value' } ] const dicParams = Object.fromEntries(params.map(obj => [obj.key, obj.value]))
ちなみに、Object.fromEntries
はes2019
で利用可能なので、tsconfig.json
のcompilerOptions > lib
に、es2019
をよしなに追加する必要があります。
TypeScriptで下記のようなコードを書いていたら A required parameter cannot follow an optional parameter.
というErrorに遭遇して、若干ハマったのでメモします。
function hoge(a?: string, b: string) { console.log(a) console.log(b) }
結論、エラーメッセージの通りで、TypeScriptでは省略可能な引数の後に、省略不可能な引数を記述することはできません。ですので、今回のような場合は、省略不可能な引数を最初に記述する必要があります。
function hoge(b: string, a?: string) { console.log(a) console.log(b) }
てな感じで本日も以上となります🍺