TypeScriptを学ぶためにJavascriptを学び直す
記事を書いた理由
基本的にPythonを使って仕事をしていますが、TypeScriptやJavascriptを使ったプロジェクトにアサインされるようになりました。
なんとなくTypeScriptできると思ったのですが、かなり苦戦したので学ぶ必要があると思いました。
TypeScriptのプロジェクトで感じた課題
- JavascriptとTypeScriptの違い
- TypeScriptか、Javascriptの記述なのかわからず、調べるのに苦労した。
- パッケージやモジュールを理解する
- 名前空間、依存関係の解決をイマイチ実感できなかった。
- パッケージ管理ツールの使い方
なので、Javascriptの仕組みメインで細かい書き方などは割愛します。
<script type="module">
囲まれたコードは囲まれた範囲内でのみスコープを持つ
export
type="module"にスコープが限定されても指定したものをグローバルにする仕組み
ES module形式
モジュールの書き方はCommonJS, ES Modules, UMDといった種類がある。
Named Import, Export
よく使う書き方
// exportする側
//まとめて
const name = "車";
const name2 = "バイク";
export { name, name2 };
//宣言と同時
export const name = "車";
export const name2 = "バイク";
// 関数もできる
export function test(){
console.log('test')
*}*
// importする側
import {name, name2} from "file path"
Alias
// export, importどちらでもaliasができる
// 基本import側で使う
// export
export { name as car, name2};
// import
import {car, name2 as bile} from "file path"
Default Import, Export
基本使わない
// 変数関数どちらもできる
// export
// 1モジュールに1回だけ記述できる。
const name = "車";
export default name;
// import
// import {name} from "file path"のように書けない
import name from "file path"
// export
// 値だけにも適用できる
export default '車';
// import
// name = '車'の状態
import name from "file path"
All Import
1つのモジュールから全てをimportする。
Alias必須
// export
const name = "車";
const name2 = "バイク";
export { name, name2 };
// import
import * as test from 'filepath'
console.log(test.name)
console.log(test.name2)
Re-Export
基本
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<script type="module" src="./index.js"></script>
</head>
<body></body>
</html>
index.js
import * as vehicle from "./vehicle/index.js";
document.body.textContent = vehicle.car;
vehicle/index.js
export * from "./vehicle.js";
vehicle/vehicle.js
const car = "車";
const bike = "バイク";
export { car, bike };
named やalias, defaultを使ったRe-Exportなどがある。
こちらはややこしいく、必要な時に調べれば済みそうなので割愛。(自力でコード読めばわかる)
Side Effect Import
変数や関数をimportせずモジュール自体をimportする。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<script type="module" src="./index.js"></script>
</head>
<body></body>
</html>
index.js
import "./side-effect-import.js";
side-effect-import.js
console.log("side effect import");
npm(yarn)
パッケージを導入、管理しやすくするツール
関連したファイル、ディレクトリ
- package.json
- 依存関係
- yarn.lock
- パッケージの依存関係を記録したファイル
- node_modules
- yarn addで導入したパッケージが保存されたディレクトリ
# package.jsonを作る
yarn init
# jquery導入
yarn add jquery
# バージョン指定
yarn add jquery@1.1.0
# パッケージのリスト
yanr list
# パッケージの削除
yarn remove jquery
パッケージがインストールされると dependencies
, devDependencies
に記載される。
パッケージの使い方
node_modules/jquery/dist/filename
が基本。distに使いたいファイルがあるらしい。確実な方法はパッケージの公式サイトで書かれている。
<script src="node_modules/jquery/dist/jquery.min.js">
パッケージのグローバル、ローカルインストール
前提としてsassのようなコンソールで実行できるものに限定する
- ローカルインストール
- 基本的にこれを使う
- node_module配下にインストールしたものが入る。
- node_moduleは量が多いのでpackage.jsonだけ共有して各自インストールする。
- グローバルインストール
- 個人で雑に開発するなら使っていいかも
# ローカルインストール
yarn add sass
# ローカル削除
yarn remove sass
# ローカルインストール
yarn global add sass
# グローバル削除
yarn global remove sass
ローカルインストールすると node_modules/.bin/sass
というファイルが生成される。
sassコマンド実行したい場合は node_modules/.bin/sass
ファイル名で実行すればよい。
Discussion
普段実務でReact × TypeScriptを使用しているものです。
とても良くまとまっていて理解がより深まりました、ありがとうございます🙇♀️
Re-Exportの箇所について一点だけ気になったのですが、
vehicle/index.jsで
export * from "./vehicle.js";
をしているのであれば、
index.jsでは、
import * as vehicle from "./vehicle/index.js";
だけでなく、
import * as vehicle from "./vehicle”;
にてimportも可能かと思います。
こちらいかがでしょうか?
動作確認しましたが、動きませんでした。
おそらくnode.jsのrequireだと使えるかもしれません。 今回の記事はnode.jsではなく、クライアントサイドで動作するjavascriptなのでrequireは使えません。